Оптимизатор запросов является частью Database Engine, которая принимает решение, как лучше выполнить запрос. Он генерирует несколько планов выполнения запроса для заданного запроса и выбирает план с наименьшей стоимостью.
Фаза оптимизации запроса может быть разделена на следующие фазы: анализ запроса, выбор индекса и выбор порядка выполнения соединения. В процессе выполнения фазы анализа запроса оптимизатор просматривает запрос с целью определения аргументов поиска, наличия операторов or и существования критериев соединения - в указанном порядке. Идентификация аргументов поиска позволяет оптимизатору принять решение, будут ли использоваться один или более существующих индексов.
Порядок, в котором две или более соединяемых таблиц записаны в предложении from оператора select, никак не влияет на решения оптимизатора относительно порядка их обработки. Database Engine поддерживает три различные техники обработки соединения, которые могут быть использованы оптимизатором. То, какую технику выберет оптимизатор, зависит от существующих статистических данных для соединяемых таблиц.
Database Engine поддерживает множество инструментов, которые могут быть использованы для редактирования существующих планов. Наиболее важными являются инструменты текстового и графического отображения планов и представления динамического управления (DMV).
Вы можете повлиять на работу оптимизатора, используя подсказки оптимизации. Database Engine поддерживает много подсказок оптимизации, которые могут быть объединены в следующие группы: подсказки таблицы, подсказки соединения и подсказки запроса.
В следующей главе рассматривается настройка производительности.