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

问题描述

这两个查询哪个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函数是从右到左,第二个函数直接过滤掉了一部分数据,这样连接起来数据就会变少一些。

时间: 2024-11-03 09:13:53

代码-这两个查询哪个SQL效率高一些???的相关文章

sql-问题中的这两种SQL哪个效率高?

问题描述 问题中的这两种SQL哪个效率高? SELECT T3.IDT3.NAMEFROM ZY_UNIT_WARD T1 LEFT JOIN XT_UNIT T2 ON T1.UNITID=T2.IDLEFT JOIN zy_ward T3 ON T2.ID=T3.UNITIDWHERE T2.ID=8SELECT T1.IDT1.NAME FROM zy_ward T1XT_UNIT T2ZY_UNIT_WARD T3WHERE T1.ID=T3.WARDID AND T2.ID=T3.UN

两个简单的sql ,哪种效率高点?

问题描述 解决方案 解决方案二:你可以explain下看看解决方案三:按常规第二种效率更好点解决方案四:按常规第二种效率更好点解决方案五:如果是mysql的话,不需要子查询selecta.id,a.name,sum(b.money)fromaleftjoinbona.id=b.Aidgroupbya.id;这个不是标准的groupby语句解决方案六:引用4楼whos2002110的回复: 如果是mysql的话,不需要子查询selecta.id,a.name,sum(b.money)fromale

oracle语句-有关两张表关联查询的sql问题

问题描述 有关两张表关联查询的sql问题 各位大神,一个sql问题请教下 有两张表,分别如下: 充值表t_recharge字段: userId.recharge_money.recharge_count 消费表t_consume字段: userId.consume_money.consume_count 现在的情况是用户可能只存在充值记录或者只存在消费记录,只存在充值记录时,消费记录显示0,只存在消费记录时,充值记录显示0 现在想查出这种结果: userId recharge_money rec

通过两张表查询数据的效率咨询

问题描述 问一下,我需要根据条件去两个数据表中取数据.我是先从一个表中取出数据后通过利用forallentriesin去另一张表中取数据效率高呢,还是通过innerjoin连接两张数据表取数据效率高呢,很是迷茫,还请高手指点,十分感谢-- 解决方案 解决方案二:这个要看具体情况,通常情况下如果两张表的关联都是关键字段时可以直接使用innerjoin,对于有些不是透明表(如簇表)是必须使用forallentriesin的.解决方案三:如果就是两张自己建的普通的表呢,比如说整两个表的关联字段有一张表

一条很复杂的sql语句与n条简单的sql语句比,哪个效率高?

问题描述 都是在连接open以后提交语句,一条复杂语句就是操作全由数据库完成,多条简单点的语句是一部分工作由数据库完成,一部分由C#程序完成 解决方案 解决方案二:自己顶下,大神快来解决方案三:肯定是一条啊解决方案四:引用2楼lstcyzj的回复: 肯定是一条啊 如果是操作很复杂不会影响性能么解决方案五:多条简单点的语句其实就是把一些计算放在程序里做了,查询和更新用的sql语句解决方案六:自己顶下,,,,解决方案七:引用3楼newlovedew的回复: 如果是操作很复杂不会影响性能么 这真不能一

oracle 中,下面哪个SQL效率比较高?

问题描述 要对比两张表TA和TB: select * from TA a where not exists (select v_key from TB b where a.v_key = b.v_key); select * from TA, (select v_key from TB) c where TA.v_key = c.v_key(+) and c.v_key is null;如果表TA和TB都有大量数据的话,哪个效率会比较高一点? 问题补充:话说能不能顺便稍微解释一下为什么较快或者较

mybatis-Mybatis关联对象查询,如何提高效率

问题描述 Mybatis关联对象查询,如何提高效率 这种方式关联对象查询时会产生一条查询的sql,对效率有一定的影响 < association property="user" column="userId" select="select" /> 如何避免这种方式,且对象有值? 解决方案 Mybatis的关联,还有循环啥的,不要用,性能太差.

两表连接的SQL语句

两表连接的SQL语句:这两种写法哪种好?现在提倡用哪一种呢? 例如:一个二表连接的SQL,有两种写法: (1)select A.c1,A.c2,B.c1,B.c2 from table1 A,table2 B where A.id=B.id (2)select A.c1,A.c2,B.c1,B.c2 from table1 A join table2 B on A.id=B.id 哪种写法好呢?现在提倡用哪一种? 你喜欢用哪一种? 我习惯用(1) ---这两个哪个好? 其中11楼的回答最为深入.

thinkphp区间查询、统计查询与SQL直接查询实例分析_php实例

本文实例讲述了thinkphp区间查询.统计查询与SQL直接查询.分享给大家供大家参考.具体方法如下: 一.区间查询: 复制代码 代码如下: $data['id']=array(array('gt',4),array('lt',10));//默认关系是(and)并且的关系  //SELECT * FROM `tp_user` WHERE ( (`id` > 4) AND (`id` < 10) )    $data['id']=array(array('gt',4),array('lt',10