怎么改写这个SQL语句让它运行不超时?

限量的蓝天 2014-12-25 09:00:43
select * from table1 where ID in (select ID from table1 where id>1000 except select id from table2 where ..... )

程序第一次运行时总是因数据量大而超时,然后再运行一下才出结果。放在数据库中运行正常出结果。
两个表中ID都有索引

我想是否能改写一下SQL让它运行得更有效率

抱歉只有20分了
...全文
143 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
join的性能消耗要远小于in
發糞塗牆 2014-12-25
  • 打赏
  • 举报
回复
返回的数据量大吗?通常这种超时是因为data cache不够而blocking的
hepe00 2014-12-25
  • 打赏
  • 举报
回复

select  *  from table1 
where ID >1000
	and not exists(select 1 from table2 where table1.ID=table2.id)
还在加载中灬 2014-12-25
  • 打赏
  • 举报
回复
SELECT T1.*
FROM table1 T1
	LEFT JOIN table2 T2 ON T1.id=T2.id AND .....--(table2表的条件,列名最好加前缀T2.)
WHERE T1.id>1000 AND T2.id IS NULL
试下,不知道会不会快点
Tiger_Zhao 2014-12-25
  • 打赏
  • 举报
回复
查询分析器默认是没有超时的,就算执行一整天页不会出错。
既然程序可能会出错,说明超时时间太短,应该把默认的 CommandTimeout 改大点。

34,594

社区成员

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

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