帮忙优化一下,执行速度很慢,谢谢!

好帅的一条鱼 2012-06-11 11:13:46
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
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiyuming_qi 2012-06-14
  • 打赏
  • 举报
回复
[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优化标准,就下一个结论???难道你不看看执行计划吗?
發糞塗牆 2012-06-11
  • 打赏
  • 举报
回复
补充一下,楼主你的查询貌似会造成“短路”,因为最后的or中只要第一个为真,后面的就不会执行,建议使用TA011 In('1','2','3')
發糞塗牆 2012-06-11
  • 打赏
  • 举报
回复
not in 或者not exists会导致全表扫描。,建议不要放到where的前面,因为where子句是从左到右顺序执行的,应该考虑索引的顺序,然后where子句中严格按照索引顺序来写,如果没有索引,那么要考虑放在前面的字段筛选能否快速地减少数据量。另外,对于一些分布零散的列,比如type,最好不要放到前面。order by 的时候,如果实在需要这样order by ,那么可以考虑聚集索引是否有必要按这个排序方式来创建,以减少查询中order by 的开销
wenshyhao 2012-06-11
  • 打赏
  • 举报
回复
你能具体说说你要查询什么麽,要不也不好解答
raymonshi 2012-06-11
  • 打赏
  • 举报
回复
围观小爱,等原理
好帅的一条鱼 2012-06-11
  • 打赏
  • 举报
回复
你真牛,可以讲解一下其中原理吗,多谢啦
黄_瓜 2012-06-11
  • 打赏
  • 举报
回复

--try
select TA001,TA002,TA006,TA034 from MOCTA where not exists (select 1 from SFCTA s where MOCTA .TA001=s.TA001 and MOCTA .TA002=s.TA002 )

AND TA011 ='1' or TA011='2' or TA011='3'
ORDER BY TA006,TA001,TA002 ASC
gogodiy 2012-06-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code

--try
select TA001,TA002,TA006,TA034 from MOCTA where not exists (select 1 from SFCTA s where MOCTA .TA001=s.TA001 and MOCTA .TA002=s.TA002 )

AND (TA011 ='1' or TA011='2' or TA011='3')
OR……
[/Quote]
偷懒引用1楼代码,最后的TA011 ='1' or TA011='2' or TA011='3'外面加一对括号。

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧