Equal_
2015-05-06 16:29
采纳率: 21.1%
浏览 1.7k

这两个查询哪个SQL效率高一些???

--第一个
SELECT emp.* FROM emp,(SELECT AVG(sal) s,emp.deptno FROM emp,dept 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);

第一个是我自己写的,第二个是官方的。第二个我觉得对于平均工资的求职每次都要计算一次,第一个我是直接取出来了一个副表,这样我的平均值只取了一次,我自认为代码比较复杂,但是对于计算机运行,效率上因该提高了。

你们是怎么看的????

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 大河行脚 2015-05-07 00:55
    已采纳

    你用一个图形化管理工具执行一下,一般都有显示执行时间的,哪个执行的时间少哪个执行的效率就高,这个还需要讨论研究的,看看不就知道了吗?

    如果回答对您有帮助,请采纳

    打赏 评论
  • 微wx笑 2015-05-06 23:30

    感觉还是第二个效率高。第一个使用了 AVG 和 GROUP BY 两个统计函数。

    打赏 评论
  • 微wx笑 2015-05-06 23:33

    想得到权威结果的话,mysql直接用explain命令分析一下。
    explain select * from table1 where some="xxxx";

    mssql使用查询分析器。

    打赏 评论
  • WorldMobile 2015-05-07 00:48

    --第一个
    SELECT emp.* FROM emp,(SELECT AVG(sal) s,emp.deptno FROM emp,dept 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效率要高些,如果数据量比较大的话,效率能差出不少

    打赏 评论
  • zz880228 2015-05-07 09:41

    没有进行测试,但我认为第二个高一些。切不说第一个有group by函数,oracle解析where函数是从右到左,第二个函数直接过滤掉了一部分数据,这样连接起来数据就会变少一些。

    打赏 评论

相关推荐 更多相似问题