我正在将一些数据从table2加载到SQL Server 2014上的table1中。这些表具有相同的字段,但它们的顺序不同。我正在选择每个字段并将它们插入目的地。
INSERT INTO table1(column1, column2, etc) SELECT(column1, column2, etc) FROM table2;
如果我在与table2相同的空表上运行此insert命令,它会在一分半钟内移动320万行。当我在table1上运行它(带有现有数据的14万行)时,插入相同的320万行需要将近3个小时。所以table1应该在插入后最终为1730万行。订单无关紧要。
为什么?
是因为字段的顺序不同吗?我从table1中删除了索引,所以不是这样。没有定义键或触发器。
以下是估算计划: http://i.stack.imgur.com/IuCOv.png
答案 0 :(得分:1)
我发现此笔记并不真正适用于SQL Server 2014,但我想我会尝试一下。
https://support.microsoft.com/en-us/kb/297861
我在table1上创建了一个聚集索引,尝试了我的插入,并在4分钟内完成。我也用非聚集索引尝试了它但是我在30分钟后杀了它。
我不是很精通为什么这样做,但确实如此。我很高兴在更可接受的时间内插入记录。感谢大家的指点。
答案 1 :(得分:0)
当你有一张空桌
索引的B-Tree也是空的。因此,SQL Server不必对树进行排序。
当你有一张包含320万条记录的表时
索引的B-Tree不为空,因此SQL Server必须为我们插入的每条记录对树进行排序。所以需要时间。