Ограничения на использование функции отсутствующих индексов

Функция отсутствующих индексов имеет следующие ограничения:

  • Не предназначена для тонкой настройки конфигурации индексирования.

  • Не может собирать статистику более чем о 500 группах отсутствующих индексов.

  • Не указывает порядок использования столбцов в индексе.

  • Для запросов, содержащих только предикаты неравенства, возвращает менее точные сведения о стоимости.

  • Сообщает только о столбцах включения для некоторых запросов, поэтому ключевые столбцы индекса необходимо выбрать вручную.

  • Возвращает только необработанные сведения о столбцах, для которых индексы могут отсутствовать.

  • Не предлагает отфильтрованные индексы.

  • Может возвращать различные стоимости для одной группы отсутствующих индексов, которая несколько раз встречается в отчете инструкции XML Showplan.

  • Не рассматривает тривиальные планы запросов.

Следующие подразделы содержат дополнительные сведения об этих ограничениях.

Тонкая настройка конфигурации индексирования

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

Максимальное количество групп отсутствующих индексов

Статистика собирается не более чем для 500 групп отсутствующих индексов. Когда этот порог достигнут, данные о группах отсутствующих индексов больше не собираются. Этот порог не подлежит настройке, его изменить нельзя.

Порядок столбцов индекса

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

SELECT column_a, column_b
FROM table_1
WHERE column_a < 10000
AND column_b < 10000
ORDER BY column_b, column_a

Функция отсутствующих индексов может предложить индекс и поставить столбец column_a перед столбцом column_b, хотя оптимальным порядком сортировки будет column_b, column_a, удовлетворяющем порядку сортировки запроса. При создании инструкции языка DDL для реализации отсутствующего индекса выберите оптимальный порядок сортировки, изучив отдельные запросы рабочей нагрузки. Дополнительные сведения об определении порядка столбцов в инструкции CREATE INDEX в зависимости от результатов функции отсутствующих индексов см. в разделе Использование сведений об отсутствующих индексах для формирования инструкций CREATE INDEX.

Запросы, содержащие только предикаты неравенства

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

SELECT *
FROM table_1
WHERE column_a > -1
AND column_b > -1

В этом примере запрос содержит только предикаты неравенства (WHERE column_a > -1 AND column_b > -1). Предположим, что все строки в таблице table_1 удовлетворяют предикатам column_a > -1 и column_b > -1. В этом случае, функция отсутствующих индексов может неправильно порекомендовать индекс по столбцам column_a и column_b. В этом случае соответствующие коэффициенты влияния, которые возвращает динамическое административное представление sys.dm_db_missing_indexes_group_stats также могут быть неверными.

Возвращает только столбцы включения для некоторых запросов

Иногда функция сообщает сведения только об использовании столбцов включения. Например, функция может сообщать о столбцах равенства = { }, столбцах неравенства = { } и столбцах включения = {b, c, …}. В этом случае один из столбцов включения необходимо выбрать в качестве ключевого столбца индекса. Используйте сведения, возвращенные функцией отсутствующих индексов для других запросов, производительность которых увеличивается благодаря этим столбцам, чтобы определить столбцы включения, которые следует выбрать в качестве ключа индекса.

Возвращает только необработанные данные

Функция отсутствующих индексов возвращает необработанные данные о столбцах, у которых индексы могут отсутствовать. Чтобы воспользоваться этими данными для создания индекса, возможно, потребуется дополнительная обработка.

Например, если указанный столбец является вычисляемым, а вычисления — недетерминированными или неточными, инструкцию CREATE INDEX для этого столбца выполнить невозможно. Если расчеты являются неточными, перед созданием индекса столбец следует сохранить.

Возвращает различную стоимость для одной и той же группы отсутствующих индексов в отчете инструкции XML Showplan

Группы отсутствующих индексов могут несколько раз встречаться в отчете инструкции XML Showplan с различной стоимостью. Это может произойти, когда различные части одного запроса по-разному извлекают выгоду из одной группы отсутствующих индексов.

Рассмотрим следующий запрос:

SELECT i.CustomerID, c.ModifiedDate, City
FROM NewIndividual i JOIN NewCustomer c ON i.CustomerID = c.CustomerID
                    AND c.CustomerType = 'I'
          JOIN NewCustomerAddress ca ON ca.CustomerID = c.CustomerID
          JOIN NewAddress a ON a.AddressID = ca.AddressID
WHERE i.CustomerID = 16701

В этом запросе два различных условия соединения по столбцу CustomerID могут привести к появлению двух одинаковых групп отсутствующих индексов, содержащих один и тот же индекс по столбцу NewIndividual.CustomerID. В этом случае динамическое административное представление sys.dm_db_missing_index_groups будет содержать только одну строку для группы отсутствующих индексов. Тем не менее, группа отсутствующих индексов будет несколько раз встречаться в отчете инструкции XML Showplan с различной стоимостью для каждого условия соединения.