我有以下查詢:插入與ORDER BY更快
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更快
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「按訂單」的操作確實的,無論如何,但比我
表table2中的值列是否有任何非聚簇索引?你在表上的值子句上有聚簇索引嗎?我可以看到兩個可能的原因。
1.列值有非某種非聚集索引,所以優化器會選擇這個索引並避免排序(它也可能是一個覆蓋索引,在這種情況下它會非常快)。沒有任何順序的查詢沒有選擇該索引的原因是因爲它是一個簡單的查詢並且沒有發生優化,並且它進行了聚集索引或表掃描,然後對數據進行排序,並且與排序相比,導致性能下降。這是最有可能的反應。
插入性能取決於你有多少個指標都和哪些列少高性能。如果table.field
上有聚簇索引,則插入未排序的值非常昂貴(值不按field
排序)。
SQL Server可以添加一個排序到計劃'DMLRequestSort'但考慮到這一點。 – 2012-07-13 16:23:23
@Martin Smith:我同意,很可能優化器會照顧它。但是,我不認爲這是有保證的;如果源列上沒有索引,則可能決定排序本身更昂貴。無論如何,如果我可以用SQL來表達它,我寧願給優化器更少的工作。 – a1ex07 2012-07-13 17:02:17
什麼意思是更優化?和「爲什麼現在有效?」這是否意味着什麼不起作用? – Mark 2012-07-13 16:07:00
除了馬克的重要問題之外,它還有多快?差異是否足夠重要? – hatchet 2012-07-13 16:13:08
將'that'閱讀爲'than',這是有道理的。 – 2012-07-13 16:13:58