我正在運行兩個非常相似的更新查詢,但由於我未知的原因,他們正在使用完全不同的執行計劃。通常這不會是一個問題,但他們都更新完全相同數量的行,但一個正在使用的執行計劃,遠遠低於其他,4秒比2分鐘,當擴大這導致我一個大問題。針對類似查詢的不同執行計劃
兩個查詢之間唯一的區別是一個是使用列CLI和另一個DLI。這些列是完全相同的數據類型,並且兩者的索引完全相同,但對於DLI查詢執行計劃,不使用索引。
任何有關爲什麼發生這種情況的幫助非常感謝。
-- Query 1
UPDATE a
SET DestKey = (
SELECT TOP 1 b.PrefixKey
FROM refPrefixDetail AS b
WHERE a.DLI LIKE b.Prefix + '%'
ORDER BY len(b.Prefix) DESC)
FROM CallData AS a
-- Query 2
UPDATE a
SET DestKey = (
SELECT TOP 1 b.PrefixKey
FROM refPrefixDetail b
WHERE a.CLI LIKE b.Prefix + '%'
ORDER BY len(b.Prefix) DESC)
FROM CallData AS a
感謝您的及時響應 我已經檢查了這兩個指標的統計數據,我不確定我在這裏尋找什麼,有什麼建議嗎?有一些不同之處。有什麼我可以做的例如,有沒有什麼辦法可以強制優化器使用索引,因爲它似乎正在採用的路線的效率要低得多。如果索引不能改進我的查詢,似乎毫無意義的索引 – 2010-06-08 15:18:14
瞭解索引如何工作在這裏是有用的。我正在編輯我的答案添加此.... – 2010-06-08 15:57:17
感謝您的解釋,這當然幫助我理解爲什麼會發生這種情況。不幸的是,我無法進一步限制結果,所以我想我必須忍受這一點,因爲從你所說的事實上來看,它實際上是最有效的方式。 – 2010-06-09 13:42:32