План запроса
План запроса (или план выполнения запроса ) — это последовательность шагов, используемых для доступа к данным в SQL системе управления реляционной базой данных . Это частный случай концепции реляционной модели планов доступа.
Поскольку SQL является декларативным , обычно существует множество альтернативных способов выполнения данного запроса с сильно различающейся производительностью. Когда запрос отправляется в базу данных, оптимизатор запросов оценивает некоторые из различных правильных возможных планов выполнения запроса и возвращает тот, который он считает лучшим вариантом. Поскольку оптимизаторы запросов несовершенны, пользователям и администраторам баз данных иногда приходится вручную проверять и настраивать планы, созданные оптимизатором, для повышения производительности.
Создание планов запросов
[ редактировать ]Данная система управления базой данных может предлагать один или несколько механизмов возврата плана для данного запроса. Некоторые пакеты содержат инструменты, которые создают графическое представление плана запроса. Другие инструменты позволяют установить для соединения специальный режим, заставляющий СУБД возвращать текстовое описание плана запроса. Другой механизм получения плана запроса включает в себя запрос к таблице виртуальной базы данных после выполнения проверяемого запроса. Например, в Oracle этого можно добиться с помощью оператора EXPLAIN PLAN.
Графические планы
[ редактировать ]образцом базы данных : Например, инструмент Microsoft SQL Server Management Studio, который поставляется с Microsoft SQL Server, показывает этот графический план при выполнении этого примера соединения двух таблиц с включенным
SELECT *
FROM HumanResources.Employee AS e
INNER JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
ORDER BY c.LastName
Пользовательский интерфейс позволяет исследовать различные атрибуты операторов, участвующих в плане запроса, включая тип оператора, количество строк, которые потребляет или создает каждый оператор, а также ожидаемую стоимость работы каждого оператора.
Текстовые планы
[ редактировать ]Текстовый план, приведенный для того же запроса на скриншоте, показан здесь:
StmtText
----
|--Sort(ORDER BY:([c].[LastName] ASC))
|--Nested Loops(Inner Join, OUTER REFERENCES:([e].[ContactID], [Expr1004]) WITH UNORDERED PREFETCH)
|--Clustered Index Scan(OBJECT:([AdventureWorks].[HumanResources].[Employee].[PK_Employee_EmployeeID] AS [e]))
|--Clustered Index Seek(OBJECT:([AdventureWorks].[Person].[Contact].[PK_Contact_ContactID] AS [c]),
SEEK:([c].[ContactID]=[AdventureWorks].[HumanResources].[Employee].[ContactID] as [e].[ContactID]) ORDERED FORWARD)
Это указывает на то, что механизм запросов выполнит сканирование индекса первичного ключа в таблице «Сотрудники» и соответствующий поиск по индексу первичного ключа (столбец «Идентификатор контакта») в таблице «Контакт», чтобы найти совпадающие строки. Результирующие строки с каждой стороны будут показаны оператору соединения вложенных циклов, отсортированы, а затем возвращены в качестве результирующего набора в соединение.
Чтобы настроить запрос, пользователь должен понимать различные операторы, которые может использовать база данных, и какие из них могут быть более эффективными, чем другие, обеспечивая при этом семантически правильные результаты запроса.
Настройка базы данных
[ редактировать ]Просмотр плана запроса может предоставить возможности для создания новых индексов или внесения изменений в существующие индексы. Это также может показать, что база данных неправильно использует существующие индексы (см. оптимизатор запросов ).
Настройка запросов
[ редактировать ]Оптимизатор запросов не всегда выбирает наиболее эффективный план запроса для данного запроса. В некоторых базах данных можно просмотреть план запроса, обнаружить проблемы, а затем оптимизатор запросов подскажет , как его улучшить. В других базах данных можно попробовать альтернативы для выражения того же запроса (другие запросы, возвращающие те же результаты). Некоторые инструменты запросов могут генерировать встроенные подсказки в запросе для использования оптимизатором.
Некоторые базы данных, например Oracle, предоставляют таблицу плана для настройки запросов. Эта таблица плана вернет стоимость и время выполнения запроса. Oracle предлагает два подхода к оптимизации:
- CBO или оптимизация на основе затрат
- RBO или оптимизация на основе правил
RBO постепенно устаревает. Для использования CBO необходимо проанализировать все таблицы, на которые ссылается запрос. Для анализа таблицы администратор базы данных может запустить код из пакета DBMS_STATS.
Другие инструменты для оптимизации запросов включают в себя:
- SQL-трассировка [ 1 ]
- Oracle Trace и TKPROF [ 2 ]
- План выполнения Microsoft SMS (SQL) [ 3 ]
- Запись производительности Tableau (все БД) [ 4 ]
Ссылки
[ редактировать ]- ^ «След SQL» . Microsoft.com . Майкрософт . Проверено 30 марта 2020 г.
- ^ «Использование SQL Trace и TKPROF» . Oracle.com . Проверено 30 марта 2020 г.
- ^ «Планы выполнения» . Microsoft.com . Майкрософт . Проверено 30 марта 2020 г.
- ^ «Оптимизация производительности книги» . Табло.com . Табло Инк . Проверено 30 марта 2020 г.