日期:2014-05-17  浏览次数:20730 次

问一下这句SQL的查询原理
SELECT   msg_id,message   from   msg   where   state= 'sd '   and   msg_id   in
(select   msg_id   from   ct   where   type= '10 '   and   msg_id=msg.msg_id);

我想问select   msg_id   from   ct   where   type= '10 '   and   msg_id=msg.msg_id这一句的
msg_id=msg.msg_id这个条件是两个表的整个数据都比较还是只限定在msg.state= 'sd '   这些数据的比较?

------解决方案--------------------
sql语句应该是 从下往上 从右往左 执行的
所以 msg_id=msg.msg_id这个条件应该是两个表的整个数据都比较的
------解决方案--------------------
OracleDBA群35903017,欢迎加入。
------解决方案--------------------
应该是整个数据都比较.
------解决方案--------------------
按照从右向左的原则,应该是整个表都比较的,对于这类语句我一般是这样写
SELECT msg_id,message from msg where msg_id in
(select msg_id from ct where type= '10 ' and msg_id=msg.msg_id)
and state= 'sd '
------解决方案--------------------
按照从右向左的原则,应该是整个表都比较的,对于这类语句我一般是这样写
SELECT msg_id,message from msg where msg_id in
(select msg_id from ct where type= '10 ' and msg_id=msg.msg_id)
and state= 'sd ' 这位老兄这个是个很好的优化方法.
------解决方案--------------------
虽然sql语句应该是 从下往上 从右往左 执行的,但是可以比较这两句sql的执行计划,其实是一样的,无论怎么写其实执行起来还是会限定在msg.state= 'sd ' 这些数据的比较。
------解决方案--------------------
楼上的兄弟说的不怎么对吧!
的确是限定在msg.state= 'sd '中,由于先执行限定在msg.state= 'sd '将大大提高SQL的查询速度.
我还是比较同意vokeyliu的做法.
------解决方案--------------------
当然写语句的时候最好能养成好习惯。
不过以前我做过比较实验,确实执行计划一致。有什么不对的地方望多指正。
------解决方案--------------------
我试过放前放后速度都一样,我还是比较同意preciouszhao(土土) 的看法
------解决方案--------------------
看基于什么规则的优化器?
如果是基于规则的,2种应该是有差异的。我觉得。
SELECT msg_id,message from msg where state= 'sd ' and msg_id in
(select msg_id from ct where type= '10 ' and msg_id=msg.msg_id);
改成
SELECT msg_id,message from msg where msg_id in
(select msg_id from ct where type= '10 ' and msg_id=msg.msg_id) and state= 'sd ' ;
就可以了吧