我有以下查询:
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”操作,但性能不如我的
最佳答案 表table2中的value列是否有任何非聚簇索引?你有关于value子句的表上的聚簇索引吗?我可以看到两个可能的原因.
1.列值上有某种非聚簇索引,以便优化器选择此索引并避免排序(它也可以是覆盖索引,在这种情况下它将非常快).没有任何顺序的查询没有选择该索引的原因是因为它是一个简单的查询并且没有进行优化并且它执行了聚簇索引或表扫描然后对数据进行了排序,这导致性能降低与order by相比.这是最有可能的回忆.
>另一个原因可能是,在插入数据时,它会在获取数据时插入数据,然后在按行排序时按顺序插入数据和相同的聚簇索引.没有页面拆分,一切都会好.但是如果没有排序,则会随机插入值,这会导致页面拆分,这会略微降低性能.但是,OP已经提到优化器在插入之前已完成排序,这意味着此方案在此处不适用.