План запиту

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

План запиту — упорядкований набір кроків, які використовуються для доступу до даних в системах керування базами даних SQL. Це конкретний випадок концепції реляційних моделей планів доступу. Оскільки мова SQL є декларативною, то зазвичай існує велика кількість альтернативних способів виконання заданого запиту з широким діапазоном продуктивності. Коли запит відправляється в базу даних, оптимізатор запитів оцінює деякі з різних, правильних можливих планів виконання запиту і повертає той, який він вважає найкращим. Оскільки оптимізатори запитів недосконалі, то користувачам і адміністраторам баз даних іноді доводиться вручну перевіряти і налаштовувати плани, створені оптимізатором, для підвищення продуктивності.

Створення планів запитів[ред. | ред. код]

Кожна система керування базами даних може запропонувати один або кілька механізмів повернення плану заданого запиту. Деякі пакети містять інструменти, що генерують графічне подання плану запиту. Інші інструменти дозволяють встановити в з'єднанні спеціальний режим, що змушує СКБД повертати текстовий опис плану запиту. Інший механізм отримання плану запиту включає запит до таблиці віртуальної бази даних після виконання запиту, який потрібно досліджувати. В Oracle, наприклад, це може бути досягнуто за допомогою оператора EXPLAIN PLAN.

Графічні плани[ред. | ред. код]

Наприклад, інструмент 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)

Він вказує, що механізм запитів виконає перевірку індексу первинного ключа таблиці Employee і пошук за індексом первинного ключа (стовпчик ContactID) таблиці Contact, щоб знайти рядки зі збігом. Результатні рядки з кожного боку буде показано вкладеному оператору об'єднання вкладених циклів, відсортовано, а потім повернуті як результат, встановлений для з'єднання. Щоб налаштувати запит, користувач повинен розуміти різні оператори, які може використовувати база даних, і ті, які можуть бути ефективнішими за інші, при цьому забезпечуючи семантично правильні результати запиту.

Налаштування бази даних[ред. | ред. код]

Перегляд плану запиту може надати можливості для створення нових індексів або зміни наявних. Він також може показати, що база даних неправильно використовує наявні індекси.

Налаштування запитів[ред. | ред. код]

Оптимізатор запитів не завжди обиратиме найефективніший план даного запиту. В деяких базах даних план запиту можна переглянути, знайти проблеми, а потім оптимізатор запитів дає підказки з його поліпшення. В інших базах даних можна спробувати альтернативи даного запиту (семантично еквівалентні запити, які повертають такі самі результати). Деякі інструменти запитів можуть генерувати вбудовані підказки в запиті для використання оптимізатором. Деякі бази даних на кшталт Oracle надають таблицю планів для налаштування запитів. Така таблиця планів повертає вартість і час виконання запиту. Oracle пропонує два підходи до оптимізації: на основі витрат або правил. Другий підхід повільно застаріває[джерело?]. Для використання оптимізації на основі витрат усі таблиці, що використовуються в запиті, повинні бути проаналізовані. Для цього адміністратор бази даних може запустити код з пакету DBMS_STATS. Іншими інструментами для оптимізації запитів є: трасування SQL, Oracle Trace та TKPROF.

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]