Вместо да имам една колона Datetime, която да обработва мекото изтриване, бих използвал две колони.
ColumnName Data Type
Deleted BIT DEFAULT(0)
DeletedAt DateTime
И създайте филтриран индекс в колоната Изтрити нещо WHERE Deleted = 0
.
Причината е, че данните с меко изтрити редове обикновено връщаме само активни/неизтрити редове. Следователно всеки път, когато връщате редове, sql сървърът може да разглежда филтрирания индекс на най-малкия тип данни (битът е 1 байт) и да обработва по-малко данни.
И ако някога искате да знаете кога даден запис е бил изтрит, колоната DaletedAt е там, за да съхрани тази част от информацията.
От друга страна, ако имате само ЕДНА колона за дата и час, за да се справите с мекото изтриване, вашият филтриран индекс ще бъде нещо като WHERE DeletedAT IS NULL
, сега в този случай SQL Server ще запитва 8 байта данни само за да провери дали даден ред е активен или не. В този случай вие извършвате 8 пъти повече обработка на данни в сравнение с колона BIT, само за да получите същите резултати. Звучи зле, нали :).
Следователно моята препоръка би била Добавяне на друга битова колона и филтриран индекс на тази битова колона, за да се справи с мекото изтриване. Оставете колоната DeletedAt, за да обработвате само изтривания.
person
M.Ali
schedule
14.03.2015