mysql 中子查询与连接查询的性能测试

测试准备

部门表
CREATE TABLE dept (
deptno INT(11) NOT NULL,
dname VARCHAR(50) DEFAULT NULL,
loc VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (deptno)
)

雇员表
CREATE TABLE emp (
empno INT(11) NOT NULL AUTO_INCREMENT,
ename VARCHAR(50) DEFAULT NULL,
job VARCHAR(50) DEFAULT NULL,
mgr INT(11) DEFAULT NULL,
hiredate DATE DEFAULT NULL,
sal DECIMAL(7,2) DEFAULT NULL,
COMM DECIMAL(7,2) DEFAULT NULL,
deptno INT(11) DEFAULT NULL,
PRIMARY KEY (empno)
)

部门表数据:
在这里插入图片描述雇员表数据:
本次测试用了1703936条数据。在这里插入图片描述可以建少量的数据,然后用下面的sql语句进行测试数据的生成。
INSERT INTO emp(ename,job,hiredate,sal,comm,deptno,mgr) SELECT ename,job,hiredate,sal,comm,deptno,mgr FROM emp;

用于测试sql语句

子查询:
SELECT e.*,(SELECT dname FROM dept WHERE e.deptno=deptno) AS 部门,(SELECT ename FROM emp WHERE empno=e.mgr ) AS 上级
FROM emp e WHERE e.sal>(SELECT AVG(sal) FROM emp);

连接查询:
SELECT e.*,e2.ename AS 上级,d.dname AS 部门 FROM emp e
LEFT JOIN dept d ON e.deptno=d.deptno
LEFT JOIN emp e2 ON e.mgr=e2.empno
WHERE e.sal> (SELECT AVG(sal) FROM emp);

测试结果

子查询:
在这里插入图片描述连接查询:
在这里插入图片描述本案例测试结果,连接查询要比子查询快将近三倍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值