Создать индекс, который заботится только о том, является ли поле DateTime пустым или нет? - PullRequest
0 голосов
/ 11 мая 2019

У меня есть много таблиц с обнуляемым столбцом DeletedDate. Каждый запрос, который я пишу, должен проверить, что запись не удалена, но ему все равно , когда она была удалена.

Я хочу добавить индекс в этот столбец, но кажется, что было бы более эффективно, если бы был способ индексировать его способом, который заботился бы только о том, был ли он нулевым или нет, вместо того, чтобы пытаться группировать по дате. Возможно ли это сделать или SQL Server достаточно умен, чтобы самостоятельно справиться с такого рода оптимизацией?

1 Ответ

1 голос
/ 11 мая 2019

Вы можете добавить вычисляемый столбец, который является двоичным индикатором удаления. Однако индексация двоичного столбца обычно не очень полезна.

Если вы хотите ускорить SELECT запросов, то может помочь включение флага удаления (или даты удаления) в качестве первого столбца в кластеризованном индексе. Запросы, использующие этот флаг, будут сканировать только страницы с неподтвержденными записями. Для этой цели, вероятно, целесообразно использовать саму дату, предполагая, что дата удаляется в текущей дате при удалении.

Недостатком, конечно, является то, что данные должны физически перемещаться при удалении. Если удаления выполняются только в одном направлении (т. Е. Нет «восстановлений»), тогда издержки могут быть не слишком большими.

...