问一下这句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 ' ;
就可以了吧