按顺序插入更快

时间:2012-07-13 16:04:41

标签: sql-server optimization insert

我有以下查询:

 INSERT INTO table(field, field1)
 SELECT value, value1  FROM table2 e 
 ORDER BY value

比这个花费更少的时间:

 INSERT INTO table(field, field1)
 SELECT value, value1  FROM table2 e 

有谁知道为什么?

第二个执行计划显示sql无论如何都会执行“order by”操作,但性能不如我的

2 个答案:

答案 0 :(得分:2)

插入性能取决于您拥有的索引数和列数。如果在table.field上存在聚簇索引,则插入未排序的值非常昂贵(值不按field排序)。

答案 1 :(得分:0)

表table2中的value列是否有任何非聚簇索引?你有关于value子句的表上的聚簇索引吗?我可以看到两个可能的原因。

1.列值上有某种非聚簇索引,以便优化器选择此索引并避免排序(它也可能是覆盖索引,在这种情况下它将非常快)。没有任何顺序的查询没有选择该索引的原因是因为它是一个简单的查询并且没有进行优化并且它执行了聚簇索引或表扫描然后对数据进行了排序,这导致性能降低与order by相比。这是最有可能的回忆。

  1. 另一个原因可能是,在插入数据时,它会在获取数据时插入数据,然后如果数据按顺序排序,则按列排序相同的聚簇索引。没有页面拆分,一切都会好。但是如果没有排序,则会随机插入值,这会导致页面拆分,这会略微降低性能。但是,OP已经提到优化器在插入之前已完成排序,这意味着此方案在此处不适用。