我有以下查询:
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”操作,但性能不如我的
答案 0 :(得分:2)
插入性能取决于您拥有的索引数和列数。如果在table.field
上存在聚簇索引,则插入未排序的值非常昂贵(值不按field
排序)。
答案 1 :(得分:0)
表table2中的value列是否有任何非聚簇索引?你有关于value子句的表上的聚簇索引吗?我可以看到两个可能的原因。
1.列值上有某种非聚簇索引,以便优化器选择此索引并避免排序(它也可能是覆盖索引,在这种情况下它将非常快)。没有任何顺序的查询没有选择该索引的原因是因为它是一个简单的查询并且没有进行优化并且它执行了聚簇索引或表扫描然后对数据进行了排序,这导致性能降低与order by相比。这是最有可能的回忆。