Когда мы добавляем или удаляем новый индекс, чтобы ускорить что-то, мы можем замедлить что-то еще. Чтобы защитить от таких случаев, после создания нового индекса я делаю следующие шаги:
- запустите Profiler,
- запустите SQL script, который содержит много запросов, которые я не хочу замедлять.
- загрузить трассировку из файла в таблицу,
- анализировать CPU, читать и записывать из трассировки на результаты предыдущих запусков, прежде чем добавить (или удалить) индекс.
Это своего рода автоматизированное и вроде того, что я хочу. Однако я не уверен, есть ли лучший способ сделать это. Есть ли какой-нибудь инструмент, который делает то, что я хочу?
Изменить 1 Человек, который голосовал, чтобы закрыть мой вопрос, не могли бы вы объяснить свои причины?
Изменить 2 Я искал googled, но не нашел ничего, что объясняло бы, как добавление индекса может замедлить. Однако это хорошо известный факт, поэтому должно быть что-то где-то. Если ничего не появится, я могу написать несколько примеров позже.
Изменить 3 Один из таких примеров: два столбца сильно коррелированы, например, высота и вес. У нас есть индекс по высоте, который не является достаточно избирательным для нашего запроса. Мы добавляем индекс по весу и выполняем запрос с двумя условиями: диапазон по высоте и диапазон по весу. потому что оптимизатор не знает о корреляции, он сильно недооценивает мощность нашего запроса.
Другим примером является добавление индекса по возрастанию столбца, такого как OrderDate, может серьезно замедлить запрос с условием вроде OrderDate > SomeDateAfterCreatingTheIndex.