使用 order by 插入速度更快

Mar*_*tin 5 sql-server optimization insert

我有以下查询:

 INSERT INTO table(field, field1)
 SELECT value, value1  FROM table2 e 
 ORDER BY value
Run Code Online (Sandbox Code Playgroud)

比这个花费更少的时间:

 INSERT INTO table(field, field1)
 SELECT value, value1  FROM table2 e 
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么?

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

Gul*_*eel 0

表 table2 中的 value 列是否有非聚集索引?您在 value 子句上的表上是否有聚集索引?我可以看到两个可能的原因。

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

  1. 另一个原因可能是,在插入数据时,它会按获取的方式插入数据,然后如果数据是有序的,并且按列排序的相同聚集索引。没有页面拆分,一切都会好起来的。但是如果没有排序,那么值将被随机插入,这可能会导致页面拆分,从而稍微降低性能。然而,OP提到优化器在插入之前已经完成了排序,这意味着这种情况在这里不适用。