Может ли неиспользуемый NONCLUSTERED INDEX все же повысить скорость запроса?

13

Это странная ситуация, но я надеюсь, что у кого-то есть ответ.

Во время некоторых проблем с производительностью мы добавили в таблицу NONCLUSTERED INDEX, как было запрошено sp_BlitzIndex. Мы проверили его использование на следующий день, и оно показало 0 операций чтения ( 0 сканирований / поисков, 0 одноэлементных поисков ), поэтому мы отключили его.

Уже в следующую минуту мы получаем жалобу на ту же медлительность приложения (проблемы с производительностью), которую мы пытались сначала проверить и устранить, когда добавили INDEX.

Теперь, я знаю в теории, это звучит чисто случайно. Индекс был доказуемо, измеримо, НЕ ИСПОЛЬЗОВАН . Его отключение НЕ ДОЛЖНО приводить к снижению производительности запросов. Но это почти СЛИШКОМ случайно.

Вопрос

Итак, мой вопрос, достаточно просто, таков:

Возможно ли вообще , что НЕКЛАСТЕРНЫЙ ИНДЕКС, чья статистика использования (из DMV / sp_BlitzIndex) НЕТ использования, все еще как-то помогает производительности запросов для уязвимой таблицы?

NateJ
источник
PS: Пожалуйста, избавь меня от общеизвестного слова "Иди и проверь!" ответ; Я должен подождать до завтра, чтобы протестировать его, потому что таблица интенсивно используется, и индекс не будет повторно включен (перестроен) до окна ночного обслуживания. И характер проблем с производительностью был спорадическим и трудно воспроизвести в любом случае; Я не говорю «Нет, я не буду проверять это», я говорю, что знаю, что мы должны проверять и планировать это, но я спрашиваю теорию и / или опытные знания.
NateJ
1
Вы можете найти это сообщение в блоге полезным; brentozar.com/archive/2016/11/…
Рич Беннер

Ответы:

13

Да, возможно, когда SQL Server решит, что статистика из этого индекса является более точной / полезной, и использует эту статистику для оценки и составления плана.

Я сталкивался с ситуациями, когда SQL Server решил использовать статистику из одного индекса и сканировать / искать другой индекс.

Изменить - это может быть неприменимо, потому что я только что понял, что вы отключили индекс. Я не проверял этот сценарий.

jesijesi
источник
Спасибо за четкий, краткий ответ! Да, нет, он не был отключен сразу, он был включен и полностью "жив", пока я не отключил его за несколько секунд до замедления пользователя-жалобы / производительности. Ты хорош :)
NateJ
1
@NateJ Эта теория может быть проверена CREATE STATISTICSвместо CREATE INDEX.
Якуб Кания