您在 SQL Server 中不會使用與 IS NULL 述詞一起建立的篩選索引

本文可協助您解決在 SQL Server 中建立索引與 Column IS NULL 述詞運算式時所發生的問題。

原始產品版本:SQL Server
原始 KB 編號: 3051225

徵兆

請參考下列案例:

  • 您會在 SQL Server 中建立篩選的索引與 Column IS NULL 述詞表達式。
  • [數據行] 欄位不包含在索引結構中。 (也就是說, 數據行 欄位不是篩選索引定義中的索引鍵或包含的數據行。

例如,您可以建立下列查詢:

CREATE UNIQUE CLUSTERED INDEX i_action_rn ON dbo.filter_test (rn)
CREATE NONCLUSTERED INDEX i_action_filt_action_date_type ON dbo.filter_test (action_type)
WHERE action_date IS NULL

注意

此查詢不會使用下列篩選索引:

SELECT count(*) FROM dbo.filter_test WHERE action_date IS NULL AND action_type=1

在此案例中,不會使用篩選的索引。 相反地,會使用叢集索引。

圖表顯示已使用叢集索引掃描。

解決方法

若要解決此問題,請在傳回的數據行中包含測試為 NULL 的數據行。 或者,將此數據行新增為索引中的數據行。

CREATE NONCLUSTERED INDEX New_i_action_filt_action_date_type ON dbo.filter_test (action_type) include (action_date) WHERE action_date IS NULL

圖表顯示已篩選的索引搜尋已使用。

其他相關資訊