Вы не можете проиндексировать битовое поле в SQL Server 2000, как указывалось в электронной документации в то время:
бит
Целочисленный тип данных 1, 0 или NULL.
Примечания
Столбцы типа бит не могут
есть индексы на них.
Да, если у вас есть только несколько строк, из миллионов, индекс поможет. Но если вы хотите сделать это в этом случае, вам нужно сделать столбец tinyint
.
Примечание : Enterprise Manager не позволит вам создать индекс для битового столбца. Если вы хотите, вы все равно можете вручную создать индекс для битового столбца:
CREATE INDEX IX_Users_IsActiveUsername ON Users
(
IsActive,
Username
)
Но SQL Server 2000 на самом деле не будет использовать такой индекс - выполнение запроса, где индекс будет идеальным кандидатом, например:
.
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
Вместо этого SQL Server 2000 будет выполнять сканирование таблицы, действуя так, как будто индекс даже не существует. Если вы измените столбец на tinyint, SQL Server 2000 будет выполнять поиск по индексу. Также следующий необработанный запрос:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
Будет выполнен поиск по индексу с последующим поиском по закладке.
SQL Server 2005 имеет ограниченную поддержку индексов для битовых столбцов. Например:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
вызовет поиск индекса через индекс покрытия. Но непокрытый корпус:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
не будет вызывать поиск по индексу с последующим поиском по закладке, он будет выполнять сканирование таблицы (или кластеризованного сканирования по индексу) вместо выполнения поиска по индексу с последующим поиском по закладке.
Проверено экспериментально и прямым наблюдением.