Nie można indeksować pola bitowego w programie SQL Server 2000, jak wskazano wówczas w Books Online:
kawałek
Całkowity typ danych 1, 0 lub NULL.
Uwagi
Kolumny typu bit nie mogą mieć indeksów.
Tak, jeśli masz tylko kilka wierszy spośród milionów, indeks pomoże. Ale jeśli chcesz to zrobić w tym przypadku, musisz zrobić kolumnę a tinyint
.
Uwaga : Enterprise Manager nie pozwoli ci utworzyć indeksu na kolumnie bitowej. Jeśli chcesz, możesz nadal ręcznie utworzyć indeks na kolumnie bitowej:
CREATE INDEX IX_Users_IsActiveUsername ON Users
(
IsActive,
Username
)
Ale SQL Server 2000 tak naprawdę nie będzie korzystał z takiego indeksu - uruchamiając zapytanie, w którym indeks byłby idealnym kandydatem, np .:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
SQL Server 2000 wykona zamiast tego skanowanie tabeli, zachowując się tak, jakby indeks w ogóle nie istniał. Jeśli zmienisz kolumnę na tinyint, SQL Server 2000 wykona przeszukiwanie indeksu. Ponadto następujące nieobjęte zapytanie:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
Wykona przeszukiwanie indeksu, po którym nastąpi wyszukiwanie zakładek.
SQL Server 2005 ma ograniczoną obsługę indeksów w kolumnach bitowych. Na przykład:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
spowoduje przeszukanie indeksu przez indeks pokrywający. Ale przypadek nieobjęty:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
nie spowoduje przeszukania indeksu, po którym nastąpi wyszukiwanie zakładek, wykona skanowanie tabeli (lub skanowanie indeksu klastrowego) zamiast przeszukiwania indeksu, po którym nastąpi wyszukiwanie zakładek.
Weryfikowane przez eksperymenty i bezpośrednią obserwację.