Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Продолжаем публикацию ответов на вопросы, заданные участниками семинара «Переход на SQL Server 2008».
В SQL Server 2008 появился новый тип индекса — фильтруемый индекс (filtered index). Его особенность состоит в том, что он охватывает только часть строк в индексируемой таблице. При создании этого типа индекса указывается предикатное выражение WHERE, определяющее те строки таблицы, которые должны быть проиндексированы.
Использование фильтруемого индекса предоставляет преимущества, если типичные запросы к таблице осуществляются на хорошо определенном небольшом подмножестве строк. Например, столбец содержит в основном значения NULL, а запрос строится только на значениях, отличных от NULL.
Фильтруемые индексы предоставляют следующие основные преимущества:
- Улучшение производительности запроса — размер фильтруемого индекса меньше, чем полнотабличного, следовательно, производительность запроса выше.
- Снижение расходов на обслуживание — индекс обслуживается, только если инструкция изменения данных в таблице затрагивает строку, входящую в условие индекса. Меньший размер фильтруемого индекса по сравнению с полнотабличным также способствует уменьшению расходов на его обслуживание.
- Снижение затрат на хранение — объем требуемого дискового пространства для хранения индекса также уменьшается, если нет необходимости в полнотабличном поиске.
Использование фильтруемого индекса рекомендуется, если таблица содержит подмножества данных, которые легко разделить. Характерные примеры:
- разреженные столбцы, содержащие небольшое количество значений, отличных от NULL;
- разнородные столбцы, которые по-разному заполнены для разных категорий записей;
- столбцы, содержащие диапазоны значений (деньги, время, даты).
Следует иметь в виду, что преимущества от использования фильтруемого индекса заметны, только если число входящих в него строк является небольшим по сравнению с объемом всей таблицы. В противном случае расходы на его обслуживание могут даже превысить расходы на обслуживание полнотабличного индекса.
На одной таблице может быть построено более одного фильтруемого индекса. Увеличение их количества не ведет к ощутимому падению производительности, если для каждого индекса удовлетворяется условие индексирования лишь небольшой части всей таблицы.
Индексированное представление (indexed view) может рассматриваться как альтернатива фильтруемому индексу, поскольку предоставляет дополнительные возможности — объединения и соединения данных из нескольких таблиц, вычисляемые столбцы, сложная логика в предикате — ценой, однако, дополнительных расходов на обслуживание и хранение. Предикатное выражение фильтруемого индекса поддерживает только простую логику, подробнее см. CREATE INDEX (Transact-SQL).
Дополнительную информацию по данной теме и примеры можно почерпнуть в следующих статьях библиотеки MSDN:
Рекомендации по проектированию фильтруемых индексов
CREATE INDEX (Transact-SQL)
ГБ
Comments
- Anonymous
June 20, 2008
Спасибо, я понял ответ, это может нам пригодиться