当前位置: 代码迷 >> Sql Server >> 天煞的,把暂时表数据插入实体表超慢,大家来看看
  详细解决方案

天煞的,把暂时表数据插入实体表超慢,大家来看看

热度:13   发布时间:2016-04-24 10:36:24.0
天煞的,把临时表数据插入实体表超慢,大家来看看
sql2008
临时表数据400万,实体表是空表
先测试一次,直接insert into 实体表 select * from 临时表,耗时大概在10几秒左右,感觉挺正常
正式开始,临时表需要连接一个200万左右的实体表1,查询结果也是400万,插入上面的实体表,超级慢
例如:
insert into 实体表(a,b,c,d)
select t.a,t.b,t.c,s.d
from   #tmp t,table s
where  t.d is null
and    t.a=s.a
and    t.b=s.b
超级慢,我也建立了索引了,应该和查询速度无关,至少select top 100 在5秒内,可就是insert into 实体表就超级慢,取消也没用,进程杀不掉,要重启,郁闷死了,我搞不懂到底哪里卡住了,大家帮忙想想法子,谢谢了
------解决方案--------------------
引用:
分批导试试呢。

我猜测他是慢在把400W数据的临时表和200W数据的临时表加载到内存里并做hash连接,TOP100快是因为只连接了前100条。如果加了ORDER BY应该也会快的。如果是这种原因,分批导一样不会快,因为分批也要加排序。

另一个原因可能是INSERT时数据库文件大小需要增加,但如果只是4个短字段的插入应该不太可能导致,因为最多几十M。
------解决方案--------------------
引用:
引用:

分批导试试呢。

我猜测他是慢在把400W数据的临时表和200W数据的临时表加载到内存里并做hash连接,TOP100快是因为只连接了前100条。如果加了ORDER BY应该也会快的。如果是这种原因,分批导一样不会快,因为分批也要加排序。

另一个原因可能是INSERT时数据库文件大小需要增加,但如果只是4个短字段的插入应该不太可能导致,……


只要排序了效率就不会高了
  相关解决方案