Индекс по битовому столбцу - PullRequest
0 голосов
/ 06 августа 2011

Рассмотрим таблицу с битовым столбцом, показывающим, является ли объект активным или неактивным, если большинство элементов неактивно (закрыто).

Насколько я понимаю, из-за ограниченного числа различных значений для этого столбца (2) SQL Engine посчитал более эффективным выполнять сканирование таблицы, чтобы найти открытые элементы, а не пытаться индексировать по битовому столбцу.

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

Раньше я помещал первичный ключ записей открытых записей в таблицу, которую использовал для идентификации активных записей, а затем присоединял основную таблицу к этой таблице «активного списка», чтобы возвращать только активные записи.

Есть ли какая-либо причина, по которой использование отфильтрованного индекса для этой цели не подходит в этой ситуации?

1 Ответ

3 голосов
/ 06 августа 2011

Отфильтрованный индекс в битовом поле Active является допустимым выбором.

Возможно, вы захотите добавить определенную СТАТИСТИКУ ОБНОВЛЕНИЯ для отфильтрованных индексов (особенно для изменчивых данных), которые специально обновляют ихстатистика с полным просмотром.Хорошей новостью является то, что они, вероятно, будут меньшими индексами (и, следовательно, более легкой / менее дорогой статистикой для обновления)

Это связано с тем, что порог статистики обновления основан на базовом столбце, а не на отфильтрованнойтолько значения индекса.

Ссылка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...