Dalam database SQL Server 2008 R2 saya, kami menggunakan Soft Deletes (Kolom DateTime yang dapat dibatalkan, disebut 'Dihapus').
Ini ada di setiap tabel di database kami.
Saya telah menambahkan indeks, terutama berdasarkan tabel yang lebih besar, pada kolom yang biasa digunakan dalam klausa WHERE
, atau pada klausa JOIN ON
.
Namun pertanyaan saya adalah, haruskah saya menyertakan kolom DELETED di semua indeks ini juga, karena sering kali, saya mungkin melakukan sesuatu seperti:
SELECT ....
FROM TableA a
INNER JOIN TableB b
ON b.TableAId = a.Id
AND b.Deleted IS NULL
WHERE a.AFieldId = x
Dalam hal ini, apakah bermanfaat jika memiliki indeks seperti ini:
CREATE NONCLUSTERED INDEX idx_TableA
ON [dbo].[Tableb] (TableAId, [Deleted])
Oleh karena itu, karena SEBAGIAN besar pertanyaan saya memeriksa tanda yang dihapus, seharusnya semuanya seperti ini?