Создание и управление индексами. Создание и управление встроенными процедурами. Оптимизация производительности запросов. Управление транзакциями и блокировками, страница 29

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

Кэширование плана выполнения

Сервер SQL имеет пространство памяти, которое используется для хранения плана выполнения и буфера данных. Процент памяти, используемый для хранения плана выполнения или данных, изменяется динамически, в зависимости от состояния системы.

Планы выполнения используется много разово вне зависимости от пользователя, для которого он был создан. В КЭШе планов выполнения не может быть двух одинаковых планов.

13.2 Получение информации о плане выполнения

Оптимизатор запросов реагирует на информацию, которая доступна в течение определения лучшего плана выполнения. Вы можете получить информацию о плане выполнения с помощью запроса таблицы sysindexes. Вы также можете получить информацию с помощью выполнения оператора STATISTICS, оператора SHOWPLAN или графического просмотрщика плана выполнения.

Просмотр выходных данных оператора STATISTIC

Вы можете использовать операторы STATISTICS IO, STATISTICS TIME и STATISTICS PROFILE, для получения информации, которая может помочь вам проверить долго выполняющиеся запросы.

Оператор STATISTICS TIME возвращает информацию о количестве миллисекунд, требуемых для разбора, компилирования и выполнения каждого оператора.

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

Оператор STATISTIC IO возвращает информацию о количестве чтений страниц сгенерированных запросом.

Вы можете использовать SET SHOWPLAT_TEXT и SET SHOWPLAN_ALL для получения детальной информации о ток, как выполнен запрос и как много понадобилось ресурсов.

Разница между SET SHOWPLAT_TEXT и SET SHOWPLAN_ALL в том, что SET SHOWPLAN_ALL возвращает дополнительную информацию, такую как I/O, CPU, и средний размер строки в запросе.

Оператор SET действует пока вы не выключите опцию, или пока не закончится сессия. В следующей сессии значение не сохраняется.

Анализ запросов

14.1 Запросы, которые используют оператор AND или OR

Запросы, которые используют оператор AND

Когда запрос содержит оператор AND, оптимизатор запросов:

*  Возвращает строки, которые соответствуют каждому критерию указанному в опции WHERE;

*  Прогрессивно ограничивает количество возвращаемых строк с каждым дополнительным ограничением поиска;

*  Может использовать индексы для поиска ограничений опции WHERE.

*  Всегда использует индекс, если индекс полезен.

*  Может использовать только один индекс, если существует несколько полезных индексов.

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

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

Запросы, которые используют оператор OR

Когда запрос содержит оператор OR, оптимизатор запросов:

*  Возвращает строки, которые соответствуют любому из критериев указанному в опции WHERE;

*  Прогрессивно увеличивает количество возвращаемых строк с каждым дополнительным ограничением поиска;

*  Может использовать один индекс, который удовлетворяет всем частям оператора OR.

*  Всегда использует сканирование таблицы или кластерный индекс, если одна колонка, на которую ссылается из оператора OR, не имеет индекса, или индекс не полезен.