Вместо одного столбца 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