select TA001,TA002,TA006,TA034 from MOCTA where TA001+TA002 not in (select TA001+TA002 from SFCTA)
AND TA011 ='1' or TA011='2' or TA011='3'
ORDER BY TA006,TA001,TA002 ASC
...全文
1078打赏收藏
帮忙优化一下,执行速度很慢,谢谢!
select TA001,TA002,TA006,TA034 from MOCTA where TA001+TA002 not in (select TA001+TA002 from SFCTA) AND TA011 ='1' or TA011='2' or TA011='3' ORDER BY TA006,TA001,TA002 ASC
[Quote=引用楼主 的回复:]
select TA001,TA002,TA006,TA034 from MOCTA where TA001+TA002 not in (select TA001+TA002 from SFCTA)
AND TA011 ='1' or TA011='2' or TA011='3'
ORDER BY TA006,TA001,TA002 ASC
[/Quote]
难道哥们简单的 看了网上的SQL优化标准,就下一个结论???难道你不看看执行计划吗?
not in 或者not exists会导致全表扫描。,建议不要放到where的前面,因为where子句是从左到右顺序执行的,应该考虑索引的顺序,然后where子句中严格按照索引顺序来写,如果没有索引,那么要考虑放在前面的字段筛选能否快速地减少数据量。另外,对于一些分布零散的列,比如type,最好不要放到前面。order by 的时候,如果实在需要这样order by ,那么可以考虑聚集索引是否有必要按这个排序方式来创建,以减少查询中order by 的开销