Vous ne pouvez pas indexer un champ de bits dans SQL Server 2000, comme indiqué dans la documentation en ligne à l'époque:
bit
Type de données entier 1, 0 ou NULL.
Remarques
Les colonnes de type bit ne peuvent pas avoir d'index sur elles.
Oui, si vous n'avez qu'une poignée de lignes, sur des millions, un index vous aidera. Mais si vous voulez le faire dans ce cas, vous devez rendre la colonne a tinyint
.
Remarque : Enterprise Manager ne vous permet pas de créer un index sur une colonne de bits. Si vous le souhaitez, vous pouvez toujours créer manuellement un index sur une colonne de bits:
CREATE INDEX IX_Users_IsActiveUsername ON Users
(
IsActive,
Username
)
Mais SQL Server 2000 n'utilisera pas réellement un tel index - exécutant une requête où l'index serait un candidat parfait, par exemple:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
SQL Server 2000 effectuera une analyse de table à la place, agissant comme si l'index n'existait même pas. Si vous changez la colonne à un tinyint SQL Server 2000 va faire une recherche d' index. En outre, la requête non couverte suivante:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
Il effectuera une recherche d'index, suivie d'une recherche de signet.
SQL Server 2005 a une prise en charge limitée des index sur les colonnes de bits. Par exemple:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
provoquera une recherche d'index dans l'index de couverture. Mais le cas non couvert:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
ne provoquera pas une recherche d'index suivie d'une recherche de signets, il effectuera une analyse de table (ou une analyse d'index groupé), plutôt que d'effectuer la recherche d'index suivie d'une recherche de signets.
Vérifié par expérimentation et observation directe.