План запитуПлан запиту — упорядкований набір кроків, які використовуються для доступу до даних в системах керування базами даних SQL. Це конкретний випадок концепції реляційних моделей планів доступу. Оскільки мова SQL є декларативною, то зазвичай існує велика кількість альтернативних способів виконання заданого запиту з широким діапазоном продуктивності. Коли запит відправляється в базу даних, оптимізатор запитів оцінює деякі з різних, правильних можливих планів виконання запиту і повертає той, який він вважає найкращим. Оскільки оптимізатори запитів недосконалі, то користувачам і адміністраторам баз даних іноді доводиться вручну перевіряти і налаштовувати плани, створені оптимізатором, для підвищення продуктивності. Створення планів запитівКожна система керування базами даних може запропонувати один або кілька механізмів повернення плану заданого запиту. Деякі пакети містять інструменти, що генерують графічне подання плану запиту. Інші інструменти дозволяють встановити в з'єднанні спеціальний режим, що змушує СКБД повертати текстовий опис плану запиту. Інший механізм отримання плану запиту включає запит до таблиці віртуальної бази даних після виконання запиту, який потрібно досліджувати. В Oracle, наприклад, це може бути досягнуто за допомогою оператора Графічні планиНаприклад, інструмент 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 пропонує два підходи до оптимізації: на основі витрат або правил. Другий підхід повільно застаріває[джерело?]. Для використання оптимізації на основі витрат усі таблиці, що використовуються в запиті, повинні бути проаналізовані. Для цього адміністратор бази даних може запустити код з пакету Див. такожПосилання
|