Оптимизация запроса с помощью анализа плана выполнения запросов MS SQL Server

Просмотрел много видео, прочитал лекции, но никак не могу оптимизировать запрос посредством анализа плана выполнения запросов. Например, есть Nested Loops, знаю, что его можно увидеть в случае соединение с таблицей по атрибуту, в которой есть дубли значения по которому мы соединяемся. Подумал использовать хинты, так сказать, принудить SQL Server поменять свое решение по построению плана запроса, а потом наткнулся на лекцию Дениса Резника, в которой он говорит, что хинты лучше не использовать вообще, т.к. по началу, возможно, будет все хорошо, а потом, с увеличением данных, этот хинт может сыграть плохую шутку. Вообщем, план запросов читать могу, а вот оптимизировать запрос глядя на этот план не получается. Что можете посоветовать? Заранее спасибо за ваши ответы.


Ответы (1 шт):

Автор решения: Vitaliy Zlobin

Хинты для оптимизации - это недоработка БД, их стоит применять, если ты совсем никак не можешь повлиять на БД.

Для понимания планов запросов есть шикарная книга: SQL Server Execution Plans(сейчас актуально третье издание).

Ещё посмотри выступления Сергея Олонцева. Резника продолжай смотреть - крутой тип.

Сейчас начни с вышеупомянутой книги(1-3 глава) и начинай экспериментировать.

Ещё порекомендую почитать Дмитрия Короткевича, тут есть перевод нескольких глав, почитай про индексы/статистику.

Для оптимизации нужно понимать подкапотные вещи, в этом ещё знание основ программирования помогает, такие как алгоритмы и структуры данных. Нужно представлять дерево индекса и поиск по нему, что такое вложенные циклы, что такое хэш-таблица.. С этим помогает справиться книга Грокаем алгоритмы.

→ Ссылка