คุณไม่สามารถสร้างดัชนีเขตข้อมูลบิตใน SQL Server 2000 ได้ตามที่ระบุไว้ในหนังสือออนไลน์ในขณะนั้น:
นิดหน่อย
ข้อมูลจำนวนเต็ม 1, 0 หรือ NULL
หมายเหตุ
คอลัมน์ประเภทบิตไม่สามารถมีดัชนีได้
ใช่หากคุณมีแถวเพียงไม่กี่แถวจากหลายล้านดัชนีจะช่วยได้ แต่ถ้าคุณต้องการทำในกรณีนี้คุณต้องสร้างคอลัมน์ a 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 จะทำการสแกนตารางแทนโดยทำราวกับว่าดัชนีไม่มีอยู่จริง ถ้าคุณเปลี่ยนคอลัมน์เป็น smallint 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
จะไม่ทำให้เกิดการค้นหาดัชนีตามด้วยการค้นหาบุ๊กมาร์กจะทำการสแกนตาราง (หรือสแกนดัชนีคลัสเตอร์) แทนที่จะทำการค้นหาดัชนีตามด้วยการค้นหาบุ๊กมาร์ก
ตรวจสอบโดยการทดลองและการสังเกตโดยตรง