【提问】联表(数万记录/表)查询很容易卡死,怎样优化咧?

EDDGA 2015-04-03 11:05:00
如题。我现在做法是用while按时间段(d1,d2...dn)收集到临时的#t_tmp,每次while末尾把#t_tmp加入到#t,目的是想避免过长时间锁定实表,可是这样做还是自己还其他用户卡死。请教我的思路对不对的?有什么好方法分拆这种中大型select?谢谢指点。

目前过程像这样:

declare @d1 datetime, @d2 datetime, @d_max datetime, @no int;
……
while (@d2 < @d_max) begin
insert into #t_tmp(....) select ... from @T where ...; -- 条件是@d1和@d2之间
insert into #t(...) select ... from #t_tmp;
set @no = 0;
while (@no < 100000) begin
set @no = @no + 1; -- 用while做延时,有用么?
end;
set @d1 = @d1 + Δt;
set @d2 = @d1 + Δt;
end;
...全文
137 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2015-04-03
  • 打赏
  • 举报
回复
要延时应该用 WAITFOR DELAY '00:00:05'--等待5秒 然后怕锁表可以用WITH(NOLOCK) 最后,你这样WHILE想实现什么呢
jamesrggg 2015-04-03
  • 打赏
  • 举报
回复
查询加上With(NoLock),应该不存在你说的问题,除非服务器性能不行
yooq_csdn 2015-04-03
  • 打赏
  • 举报
回复
引用 2 楼 ky_min 的回复:
要延时应该用 WAITFOR DELAY '00:00:05'--等待5秒 然后怕锁表可以用WITH(NOLOCK) 最后,你这样WHILE想实现什么呢
WAITFOR DELAY '00:00:05'--等待5秒 -------------这个回话都会停下来

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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