Чтобы уточнить вещи
Идея индекса покрытия состоит в том, что он также включает столбцы, которые не могут быть найдены (используется в предложении WHERE и т. Д.), Но могут быть выбраны (часть списка столбцов SELECT ).
Кажется, нет простого способа доказать существование неиспользованных столбцов в покрывающем индексе . Я могу думать только о кропотливом процессе ниже:
- За репрезентативный период времени запишите все запросы, выполняемые на сервере (или в нужной таблице)
- Отфильтровывать (с помощью регулярных выражений) запросы, не связанные с базовой таблицей
- Для остальных запросов получите план запроса; отменить запросы, не включающие рассматриваемый индекс
- Для оставшихся запросов, или, вернее, для каждого «шаблона» запроса (многие запросы совпадают, но для значений критериев поиска) составьте список столбцов из индекса, которые либо находятся в предложении select, либо where (или в РЕГИСТРИРУЙТЕСЬ ...)
- столбцы из индекса, не найденные в этом списке, безусловно хороши.
Теперь может быть еще несколько [столбцов для удаления], потому что описанный выше процесс не проверяет, в каком контексте используется покрывающий индекс (возможно, он будет использоваться для разрешения где, но в базовой таблице. также по-прежнему доступен (например, чтобы получить доступ к столбцам, не входящим в индекс покрытия ...)
Вышеуказанный клинический подход довольно непривлекателен. Аналитический подход может быть предпочтительнее :
Поиск всех запросов «шаблонов», которые могут использоваться во всех приложениях, использующих сервер. Для каждого из этих шаблонов найдите те, которые могут использовать индекс покрытия. Это (снова несколько дыр ...) запросов, которые:
- включает ссылку на базовую таблицу
- ни в коем случае не ссылаться на столбец из базовой таблицы, который не является столбцом в индексе
- не использовать критерии поиска из базовой таблицы, которые являются более избирательными, чем столбцы индекса (в том же порядке ...)
Или ... даже не обращаясь к приложениям: подумайте обо всех случаях использования , и если запросы, которые будут удовлетворять этим случаям, выиграют не от всех столбцов в индексе. Это подразумевает, что у вас есть относительно хорошее представление о селективности индекса относительно его первых нескольких столбцов.