Как включение подсказки индекса SQL влияет на производительность запросов?
Скажем, у меня есть таблица в базе данных SQL 2005 с более чем 2 000 000 записей и несколькими индексами. В чем преимущество использования подсказок индекса в моих запросах? Есть ли недостатки в использовании подсказок индекса в запросах?
4 ответа
Ключевой момент, на который, как я полагаю, все здесь указывают, заключается в том, что при ОЧЕНЬ тщательном рассмотрении использование подсказок по индексам может повысить производительность ваших запросов, ЕСЛИ И ТОЛЬКО ЕСЛИ, существует несколько индексов, которые можно использовать для получения данных, И если SQL Сервер не использует правильный.
По своему опыту я обнаружил, что не очень часто нужны подсказки индекса, я думаю, что у меня может быть 2-3 запроса, которые используют их сегодня... Правильное создание индекса и оптимизация базы данных должны помочь вам путь к исполняющей базе данных.
Во-первых, попробуйте использовать SQL Profiler для создания файла активности.trc в вашей базе данных для нормальной рабочей нагрузки в течение нескольких часов. А затем используйте "Помощник по настройке ядра СУБД" в меню "Инструменты" SQL Server Management Studio, чтобы узнать, предлагает ли он какие-либо дополнительные индексы, составные индексы или охватывающие индексы, которые могут быть полезны.
Я никогда не использую подсказки запросов и в основном работаю с многомиллионными базами данных строк. Иногда они могут негативно повлиять на производительность.
Подсказка по индексу вступит в силу только тогда, когда ваш запрос включает в себя объединение таблиц, и когда столбцы, используемые для объединения с другой таблицей, соответствуют нескольким индексам. В этом случае ядро базы данных может использовать один индекс для объединения, и из исследования вы можете узнать, что если он использует другой индекс, запрос будет работать лучше. В этом случае вы предоставляете подсказку индекса, сообщающую механизму базы данных, какой индекс использовать.
По моему опыту, иногда вы знаете больше о своем наборе данных, чем SQL Server. В этом случае вы должны использовать подсказки запроса. Другими словами: вы помогаете оптимизатору принять решение.
Однажды я создал хранилище данных, где SQL Server не использовал оптимальный индекс для сложного запроса. Путем указания индекса в моем запросе мне удалось ускорить выполнение запроса примерно в 100 раз.
Используйте их только после анализа плана запроса. Если вы думаете, что ваш запрос может выполняться быстрее при использовании другого индекса или при использовании их в другом порядке, дайте подсказку серверу.