Oto przefiltrowany indeks. Z dokumentacji (podkreślenie moje):
Indeks filtrowany to zoptymalizowany indeks nieklastrowany, który jest szczególnie odpowiedni do obsługi zapytań, które wybierają z dobrze zdefiniowanego podzbioru danych. Wykorzystuje predykat filtra do indeksowania części wierszy w tabeli. Dobrze zaprojektowany filtrowany indeks może poprawić wydajność zapytań, a także zmniejszyć koszty utrzymania indeksu i przechowywania w porównaniu z indeksami pełnotabelowymi.
A oto przykład połączenia unikalnego indeksu z predykatem filtra:
create unique index MyIndex
on MyTable(ID)
where RecordStatus = 1;
To zasadniczo wymusza unikalność ID
kiedy RecordStatus
to 1
.
Po utworzeniu tego indeksu naruszenie unikalności spowoduje zgłoszenie błędu:
Msg 2601, poziom 14, stan 1, wiersz 13
Nie można wstawić zduplikowanego wiersza klucza w obiekcie „dbo.MyTable” z unikatowym indeksem „MyIndex”. Zduplikowana wartość klucza to (9999).
Uwaga:filtrowany indeks został wprowadzony w SQL Server 2008. W przypadku wcześniejszych wersji SQL Server zobacz tę odpowiedź.