我有一個SP sp在一個表中執行,其索引在三列col_1,col_2,col_3,col_4,col_n中執行。 Col 1是一個身份。 col_2,col_3,col_4上有一個索引。當查詢條件值爲空時,查詢計劃顯示99%的密鑰查找
當我查詢類似
@parameter=1
SELECT col_2,col_3,col_4
WHERE [email protected]
AND col_3='2'
AND col_4=10.00
它使用之前我提到的,但如果我查詢類似
@paramete =null; -- the parameter is null in this case when parameter
has value it uses the index
SELECT col_2,col_3,col_4
WHERE (@parameter is null OR col_2 = @parameter)
AND col_3='2'
AND col_4=10.00
它顯示了一個關鍵的查詢計劃的索引查找上COL_1用99%的成本。
有時候這個值是空的,我必須保持那樣。
有人可以解釋這一點嗎?它可以修復嗎?
謝謝。
這正是這種類型的查詢將始終工作。它通常被稱爲「全部捕獲」查詢。這裏有一篇很好的文章,討論這種類型的查詢以及如何解決這個問題。 https://www.simple-talk.com/sql/t-sql-programming/how-to-confuse-the-sql-server-query-optimizer/ –