No puede indexar un campo de bits en SQL Server 2000, como se indicó en los Libros en pantalla en ese momento:
poco
Tipo de datos entero 1, 0 o NULL.
Observaciones
Las columnas de tipo bit no pueden tener índices.
Sí, si solo tiene un puñado de filas, entre millones, un índice le ayudará. Pero si desea hacerlo en este caso, debe hacer que la columna a tinyint
.
Nota : Enterprise Manager no le permitirá crear un índice en una columna de bits. Si lo desea, aún puede crear manualmente un índice en una columna de bits:
CREATE INDEX IX_Users_IsActiveUsername ON Users
(
IsActive,
Username
)
Pero SQL Server 2000 en realidad no usará dicho índice, ejecutando una consulta donde el índice sería un candidato perfecto, por ejemplo:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
En su lugar, SQL Server 2000 realizará una exploración de la tabla, actuando como si el índice ni siquiera existiera. Si cambia la columna a un tinyint, SQL Server 2000 hará una búsqueda de índice. Además, la siguiente consulta no cubierta:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
Realizará una búsqueda de índice, seguida de una búsqueda de marcadores.
SQL Server 2005 tiene soporte limitado para índices en columnas de bits. Por ejemplo:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
provocará una búsqueda de índice a través del índice de cobertura. Pero el caso no cubierto:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
no provocará una búsqueda de índice seguida de una búsqueda de marcador, realizará un escaneo de tabla (o escaneo de índice agrupado), en lugar de realizar la búsqueda de índice seguida de una búsqueda de marcador.
Verificado por experimentación y observación directa.