当前位置: 代码迷 >> Sql Server >> 【提问】联表(数万记要/表)查询很容易卡死,怎样优化咧
  详细解决方案

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

热度:77   发布时间:2016-04-24 09:14:07.0
【提问】联表(数万记录/表)查询很容易卡死,怎样优化咧?
本帖最后由 EDDGA 于 2015-04-03 11:07:26 编辑
如题。我现在做法是用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;

------解决思路----------------------
查询加上With(NoLock),应该不存在你说的问题,除非服务器性能不行
------解决思路----------------------
要延时应该用
WAITFOR DELAY '00:00:05'--等待5秒

然后怕锁表可以用WITH(NOLOCK)

最后,你这样WHILE想实现什么呢
------解决思路----------------------
引用:
要延时应该用
WAITFOR DELAY '00:00:05'--等待5秒

然后怕锁表可以用WITH(NOLOCK)

最后,你这样WHILE想实现什么呢

WAITFOR DELAY '00:00:05'--等待5秒 -------------这个回话都会停下来
  相关解决方案