Статистики и информация об отсутствующих индексах и

Исполнению запроса компонентом Database Engine предшествует его анализ оптимизатором запросов, с целью определения наиболее эффективного для конкретного условия фильтра способа извлечения запрошенных данных. Помимо самого запроса оптимизатором запросов используется схема базы данных (определения таблиц и индексов) и статистики базы данных.

План выполнения запроса задает:

· Последовательность, в которой происходит обращение к исходным таблицам.

Как правило, существует много последовательностей, в которых сервер базы данных может обращаться к базовым таблицам для построения результирующего набора, и в общем случае последовательность обращения к таблицам при непосредственном выполнении запроса может не совпадать с последовательностью в которой эти таблицы указаны в запросе.

· Методы, используемые для извлечения данных из каждой таблицы.

Есть различные методы для обращения к данным в каждой таблице. Например, если необходимы только несколько строк с определенными ключевыми значениями, то Database Engine может использовать индекс. Если необходимы все строки в таблице, то может быть выполнен полный просмотр таблицы, игнорируя индексы. Если необходимы все строки в таблице, но есть индекс, ключевые столбцы которого находятся в ORDER BY, то выполнение просмотра индекса вместо просмотра таблицы позволит избежать отдельный сортировки результирующего набора.

Оптимизатор запросов SQL Server основан на оценке стоимости. Каждому возможному плану выполнения соответствует некоторая стоимость, определенная в терминах объема использованных вычислительных ресурсов. Оптимизатор запросов SQL Server выбирает план выполнения, основываясь не только на самой низкой стоимости ресурсов - он выбирает такой план, который возвращает результаты пользователю за минимальное время при разумной стоимости ресурсов. Например, параллельная обработка запроса обычно использует больше ресурсов, чем его последовательная обработка, но завершает выполнение запроса быстрее. Оптимизатор SQL Server будет использовать параллельный план выполнения для возврата результатов, если это не окажет негативного влияния на загрузку сервера.

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

Каждый объект статистики создается для списка из одного или нескольких столбцов таблицы и содержит гистограмму, в которой отображается распределение значений в первом столбце. Объекты статистики для нескольких столбцов также хранят статистические сведения о корреляции значений между столбцами. Эти статистические данные корреляции называются значениями плотности и получаются из числа уникальных строк значений столбцов.

Если статистика индекса не является актуальной, оптимизатор запросов, возможно, не сделает лучший выбор для текущего состояния таблицы.

Использование статистики на уровне базы данных контролируется следующими параметрами, рассмотренными в модуле 2:

· AUTO_CREATE_STATISTICS

Оптимизатор запросов в случае необходимости создает статистику по отдельным столбцам в предикатах запросов, чтобы улучшить планы запросов и повысить производительность запросов.

· AUTO_UPDATE_STATISTICS

Указывает, что оптимизатор запросов обновляет статистику, если она используется в запросе и может оказаться устаревшей. Статистика становится устаревшей, после того как операции вставки, обновления, удаления или слияния изменяют распределение данных в таблице.

· AUTO_UPDATE_STATISTICS_ASYNC

Указывает, что запросы, которые запускают автоматическое обновление устаревшей статистики, не будут ожидать обновления статистики перед компиляцией. Последующие запросы будут использовать обновленную статистику, когда она будет доступна.

 

Помимо статистик для оптимизации запросов используется информация об индексах. При анализе списка запрашиваемых столбцов и порядка сортировки оптимизатор запросов ищет наиболее подходящие индексы для ускорения обработки запроса и снижения нагрузки на вычислительные мощности сервера. Если наиболее подходящие индексы не существуют, оптимизатор запросов формирует близкий к оптимальному план запроса, при этом он сохраняет сведения об отсутствующих индексах. Функция отсутствующих индексов позволяет получить сведения об этих индексах, и решить, стоит ли их создавать в базе данных или нет.