Bạn không thể lập chỉ mục một trường bit trong SQL Server 2000, như được chỉ ra trong Sách trực tuyến vào thời điểm đó:
bit
Kiểu dữ liệu số nguyên 1, 0 hoặc NULL.
Nhận xét
Các cột kiểu bit không thể có chỉ mục trên chúng.
Có, nếu bạn chỉ có một số ít hàng, trong số hàng triệu, một chỉ mục sẽ hữu ích. Nhưng nếu bạn muốn làm điều đó trong trường hợp này bạn cần phải làm cột a tinyint
.
Lưu ý : Trình quản lý doanh nghiệp sẽ không cho phép bạn tạo chỉ mục trên cột bit. Nếu bạn muốn, bạn vẫn có thể tạo chỉ mục theo cách thủ công trên một cột bit:
CREATE INDEX IX_Users_IsActiveUsername ON Users
(
IsActive,
Username
)
Nhưng SQL Server 2000 sẽ không thực sự sử dụng một chỉ mục như vậy - chạy một truy vấn mà chỉ mục sẽ là một ứng cử viên hoàn hảo, ví dụ:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
Thay vào đó, SQL Server 2000 sẽ thực hiện quét bảng, hoạt động như thể chỉ mục thậm chí không tồn tại. Nếu bạn thay đổi cột thành tinyint SQL Server 2000 sẽ thực hiện tìm kiếm chỉ mục. Ngoài ra, truy vấn không được đề cập sau:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
Nó sẽ thực hiện tìm kiếm chỉ mục, sau đó là tra cứu dấu trang.
SQL Server 2005 không hỗ trợ giới hạn cho các chỉ mục trên cột bit. Ví dụ:
SELECT TOP 1 Username
FROM Users
WHERE IsActive = 0
sẽ gây ra một tìm kiếm chỉ mục thông qua chỉ mục bao trùm. Nhưng trường hợp không được bảo hiểm:
SELECT TOP 1 *
FROM Users
WHERE IsActive = 0
sẽ không thực hiện tìm kiếm chỉ mục theo sau là tra cứu dấu trang, nó sẽ thực hiện quét bảng (hoặc quét chỉ mục theo cụm), thay vì thực hiện tìm kiếm chỉ mục sau đó là tra cứu dấu trang.
Được kiểm chứng bằng thực nghiệm và quan sát trực tiếp.