Что следует иметь в виду, когда SQL Server просит индекс
Пересказ статьи Brent Ozar. Things to Consider When SQL Server Asks for an Index
В SQL Server мне нравится то, что при компиляции плана запроса он находит время, чтобы определить, какой индекс мог бы помочь запросу, который вы выполняете. Постоянные читатели блога знают, что я отпускаю множество шуток относительно качества этих рекомендаций - зачастую они невероятно плохи - однако даже плохие предложения могут оказаться полезными, если вы изучите их более внимательно.
Вот некоторые вещи, о которых мы думаем во время анализа:
После преодоления этих начальных барьеров, мы думаем о самих рекомендациях индексов:
- Просил ли SQL Server тот же самый индекс вчера?
- Использовался ли индекс хотя бы 100 раз за день?
- Имеет ли таблица в запросе кластеризованный индекс? Если нет, вероятно, нам следует сначала подумать о добавлении этого индекса.
- Имеет ли таблица 5 индексов или менее? Если индексов больше, самое время подумать об устранении дубликатов индексов с помощью моего метода D.E.A.T.H.
- Содержит ли таблица менее 100М строк и размер менее 10Гб? Если так, то индексы проще строить на месте. При больших размерах следует подойти с особой осторожностью и планированием, поскольку даже добавление индекса может потребовать окна обслуживания в зависимости от скорости вашего железа.
После преодоления этих начальных барьеров, мы думаем о самих рекомендациях индексов:
- Имеет ли индекс только один ключ и один включенный столбец? Если так, то, вероятно, имеет смысл добавить включенный столбец в ключ, пока первый ключ тоже имеет смысл.
- Какие типы данных имеют столбцы? Если они большого размера (скажем, свыше 200 символов), рассмотрите вариант их исключения, особенно если они являются включенными столбцами.
- Как много столбцов в индексе? Если больше пяти, подумайте об исключении включенных столбцов.
- Рекомендуется ли более узкое подмножество существующего индекса? Если так, это, вероятно, не очень подойдет.
- Рекомендуется ли более широкая версия существующего индекса? Если так, возможно, стоит удалить более узкую (старую) версию после замены её более широкой новой.
- После ваших настроек на основе данного выше руководства, стал ли индекс точно соответствовать существующему индексу таблицы? Если так, оставьте его - пришло время пересмотра запросов с высоким уровнем чтения, а не рассмотрением рекомендаций относительно отсутствующих индексов.
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой