测试准备
部门表
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);
测试结果
子查询:
连接查询:
本案例测试结果,连接查询要比子查询快将近三倍。

本文探讨了SQL查询中的子查询与连接查询在处理数据时的效率问题。通过对1703936条雇员和部门数据的测试,发现连接查询在速度上比子查询快将近三倍。测试涉及了平均薪资以上的员工信息,并展示了两种查询方式的实现和结果对比。
2

被折叠的 条评论
为什么被折叠?



