问题描述
- 这两个查询哪个SQL效率高一些???
- --第一个
SELECT emp.* FROM emp(SELECT AVG(sal) semp.deptno FROM empdept WHERE emp.deptno=dept.deptno GROUP BY emp.deptno)a
WHERE emp.deptno=a.deptno AND emp.sal>a.s;--第二个
SELECT * FROM emp a WHERE a.sal>(SELECT AVG(sal) FROM emp b WHERE a.deptno = b.deptno);第一个是我自己写的,第二个是官方的。第二个我觉得对于平均工资的求职每次都要计算一次,第一个我是直接取出来了一个副表,这样我的平均值只取了一次,我自认为代码比较复杂,但是对于计算机运行,效率上因该提高了。
你们是怎么看的????
解决方案
你用一个图形化管理工具执行一下一般都有显示执行时间的哪个执行的时间少哪个执行的效率就高,这个还需要讨论研究的,看看不就知道了吗?
如果回答对您有帮助请采纳
解决方案二:
感觉还是第二个效率高。第一个使用了 AVG 和 GROUP BY 两个统计函数。
解决方案三:
想得到权威结果的话,mysql直接用explain命令分析一下。
explain select * from table1 where some=""xxxx"";
mssql使用查询分析器。
解决方案四:
--第一个
SELECT emp.* FROM emp(SELECT AVG(sal) semp.deptno FROM empdept WHERE emp.deptno=dept.deptno GROUP BY emp.deptno)a
WHERE emp.deptno=a.deptno AND emp.sal>a.s;
--第二个
SELECT * FROM emp a WHERE a.sal>(SELECT AVG(sal) FROM emp b WHERE a.deptno = b.deptno);
从SQL上来看,第二个SQL效率要高些,如果数据量比较大的话,效率能差出不少
解决方案五:
没有进行测试,但我认为第二个高一些。切不说第一个有group by函数,oracle解析where函数是从右到左,第二个函数直接过滤掉了一部分数据,这样连接起来数据就会变少一些。