ภายในฐานข้อมูล SQL Server 2008 R2 ของฉัน เราใช้ Soft Deletes (คอลัมน์ DateTime ที่เป็นโมฆะเรียกว่า 'ลบ')
นี่คือทุกตารางในฐานข้อมูลของเรา
ฉันได้เพิ่มดัชนี โดยอิงตามตารางขนาดใหญ่เป็นหลัก ในคอลัมน์ที่ใช้กันทั่วไปในส่วนคำสั่ง WHERE
หรือในส่วนคำสั่ง JOIN ON
คำถามของฉันคือ ฉันควรรวมคอลัมน์ DELETED ไว้ในดัชนีเหล่านี้ทั้งหมดด้วยหรือไม่ เพราะโดยส่วนใหญ่แล้ว ฉันอาจทำสิ่งต่อไปนี้
SELECT ....
FROM TableA a
INNER JOIN TableB b
ON b.TableAId = a.Id
AND b.Deleted IS NULL
WHERE a.AFieldId = x
ในกรณีนี้จะเป็นประโยชน์หรือไม่ที่จะมีดัชนีเช่นนี้
CREATE NONCLUSTERED INDEX idx_TableA
ON [dbo].[Tableb] (TableAId, [Deleted])
ดังนั้น เนื่องจากข้อความค้นหาส่วนใหญ่ของฉันตรวจสอบแฟล็กที่ถูกลบ พวกมันทั้งหมดควรเป็นเช่นนี้หรือไม่