итів сучасних реляційних СУБД розрізняються по складності і реалізації, всі вони слідують одними і темі ж основними етапами у виконанні процесу оптимізації запитів. Розуміння принципів роботи вбудованих оптимізаторів, безсумнівно, є першорядним у справі написання ефективних запитів. p align="justify"> У цій главі будуть розглянуті принципи роботи оптимізаторів запитів реляційних СУБД, а також, на основі цього, будуть дані рекомендації з написання ефективних SQL-запитів.
На початковому етапі синтаксичної оптимізації відбувається ряд перевірок на предмет коректності даного запиту. У тому випадку, якщо запит записаний з помилкою, подальше його виконання припиняється і СУБД повідомляє про помилку, інакше - відбувається перехід до наступної фази. p align="justify"> На цій фазі виконується перетворення запиту в деякий внутрішнє подання, більш зручне для машинних маніпуляцій. Це повністю виключає з розгляду конструкції зовнішнього рівня і готує грунт для подальших стадій оптимізації. p align="justify"> Зазвичай внутрішнє подання запитів є певною модифікацією абстрактного синтаксичного дерева, або дерева запиту.
На наступній стадії відбувається перетворення запиту в більш зручну, для СУБД, форму, звану канонічної формою, яка вимагає менших витрат на виконання запиту, але дає результат, повністю еквівалентний вихідному запитом. Поняття канонічної форми вживається, в багатьох розділах математики та пов'язаних з нею дисциплін. Канонічна форма може бути визначена таким чином. Нехай Q - безліч об'єктів (запитів), і нехай існує поняття про еквівалентність цих об'єктів (а саме: запити q1 і q2 еквівалентні тоді і тільки тоді, коли дають ідентичні результати). Кажуть, що підмножина C безлічі Q є підмножиною канонічних форм для запитів з Q в сенсі певної вище еквівалентності тоді і тільки тоді, коли кожному об'єкту q з Q відповідає тільки один об'єкт c з C. Тоді кажуть, що об'єкт з є канонічною формою об'єкта q. Всі необхідні властивості, якими володіє об'єкт q, також характерні і об'єкту с. Тому, щоб довести різні необхідні результати, достатньо вивчити менш потужне безліч об'єктів C, а не більш потужне безліч Q.
Основною метою перетворення запиту в канонічну форму є приведення запиту до більш легкотравно, для конкретної СУБД, увазі, що використовується на наступних фазах перетворення.
Логічні перетворення предикатів
Один з етапів побудова канонічної форми запиту здійснюється посредствам виконання простих логічних перетворень предикатів запиту (т.е умов, за якими буде здійснюватися вибірка з БД). Перш за все, логічне перетворення застосовно до простих предикатам, які мають наступний вигляд: "некоторое_вираженіе ОС некоторое_вираженіе", де деякий вираз може являти собою константу, значення певного поля таблиці, допустимі агрегатні функції і т.п., а ОС - допустима операція порівняння . Кан...