Não é possível indexar um campo de bits no SQL Server 2000, conforme indicado nos Manuais Online da época:
mordeu
Tipo de dados inteiro 1, 0 ou NULL.
Observações
As colunas do tipo bit não podem ter índices.
Sim, se você tiver apenas um punhado de linhas, entre milhões, um índice ajudará. Mas se você quiser fazer isso neste caso, você precisa tornar a coluna a tinyint
.
Observação : o Enterprise Manager não permitirá que você crie um índice em uma coluna de bits. Se desejar, você ainda pode criar manualmente um índice em uma coluna de bits:
CREATE INDEX IX_Users_IsActiveUsername ON Users
(
IsActive,
Username
)
Mas o SQL Server 2000 não usará realmente esse índice - executando uma consulta em que o índice seria um candidato perfeito, por exemplo:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
O SQL Server 2000 fará uma varredura na tabela, agindo como se o índice nem existisse. Se você alterar a coluna para um tinyint, o SQL Server 2000 fará uma busca de índice. Além disso, a seguinte consulta não coberta:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
Ele executará uma busca de índice, seguida por uma pesquisa de marcador.
O SQL Server 2005 tem suporte limitado para índices em colunas de bits. Por exemplo:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
irá causar uma busca de índice através do índice de cobertura. Mas o caso não coberto:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
não causará uma busca de índice seguida por uma pesquisa de marcador, ele executará uma varredura de tabela (ou varredura de índice clusterizado), em vez de realizar a busca de índice seguida por uma pesquisa de marcador.
Verificado por experimentação e observação direta.