Non è possibile indicizzare un campo di bit in SQL Server 2000, come indicato all'epoca nella documentazione in linea:
po
Tipo di dati intero 1, 0 o NULL.
Osservazioni
Le colonne di tipo bit non possono contenere indici.
Sì, se hai solo una manciata di righe, su milioni, un indice ti aiuterà. Ma se vuoi farlo in questo caso devi rendere la colonna a tinyint
.
Nota : Enterprise Manager non ti consentirà di creare un indice su una colonna di bit. Se lo desideri, puoi comunque creare manualmente un indice su una colonna di bit:
CREATE INDEX IX_Users_IsActiveUsername ON Users
(
IsActive,
Username
)
Ma SQL Server 2000 non utilizzerà effettivamente tale indice, eseguendo una query in cui l'indice sarebbe un candidato perfetto, ad esempio:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
SQL Server 2000 eseguirà invece una scansione della tabella, agendo come se l'indice non esistesse nemmeno. Se si modifica la colonna in un tinyint, SQL Server 2000 eseguirà una ricerca dell'indice. Inoltre, la seguente query non coperta:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
Eseguirà una ricerca di indice, seguita da una ricerca di segnalibri.
SQL Server 2005 ha un supporto limitato per gli indici sulle colonne di bit. Per esempio:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
farà sì che un indice cerchi attraverso l'indice di copertura. Ma il caso non coperto:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
non provocherà una ricerca dell'indice seguita da una ricerca del segnalibro, eseguirà una scansione della tabella (o scansione dell'indice cluster), invece di eseguire la ricerca dell'indice seguita da una ricerca del segnalibro.
Verificato da sperimentazione e osservazione diretta.