Новшество SQL Server 2008 — фильтруемые индексы
Продолжаем публикацию ответов на вопросы, заданные участниками семинара «Переход на 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
Спасибо, я понял ответ, это может нам пригодиться