我一直在查看查询中的一个大 INSERT 问题:
INSERT table_name
SELECT .....;
该表没有索引,需要大约 2000 万行才能插入其中。我在我们的一台服务器上运行 SQL Server 2008 R2 中的查询。原版表演约40分钟。然后我在这里阅读帖子,告诉我将INSERT
in BEGIN TRANSACTION
/包装起来COMMIT
。我这样做了,花费的时间减少到 6 分钟。
但是,当我尝试运行接下来的几次事务包装查询时,时间又回到了 40 分钟,就像TRANSACTION
效果消失了一样。我不知道在接下来的运行中发生了什么。任何想法?
添加:
另一篇文章说 TRANSACTION 旨在用于数据一致性而不是性能,建议每 5K 行批量插入。如何将单个 INSERT SELECT 语句拆分为批次?我很困惑。
更新:
事实上,我发现性能提升不是来自 TRANSACTION,而是可能来自服务器端表缓存,因为我接下来运行了几次,性能大约是 5 分钟。