Problembeschreibung
Betrachten Sie das folgende Szenario:
-
Erstellen einen gefilterten Index mit der Spalte ISTNULL Prädikatausdruck in Microsoft SQL Server.
-
Das Spaltenfeld ist in der Struktur nicht enthalten. (D. h. die Spalte Feld ist kein Schlüssel oder Spalte in dem gefilterten Indexdefinition enthalten.)
Erstellen Sie z. B. die folgende Abfrage:
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
Beachten Sie, dass diese Abfrage nicht den gefilterten Index verwenden:
select count(*) from dbo.filter_test where action_date is null and action_type=1
In diesem Szenario wird der gefilterte Index nicht verwendet. Stattdessen wird der gruppierte Index verwendet.
Problemlösung
Um dieses Problem zu beheben, enthalten Sie die Spalte, die in der zurückgegebenen Spalten NULL getestet wird. Oder fügen Sie diese Spalte als Spalten in den Index aufgenommen.
CREATE NONCLUSTERED INDEX New_i_action_filt_action_date_type ON dbo.filter_test (action_type) include (action_date) WHERE action_date IS NULL
Weitere Informationen
Finden Sie in den folgenden Websites des Microsoft Developer Network (MSDN):
Gefilterte Indizes
Gruppierte und nicht gruppierte Indizes beschrieben