і знаходяться в тому ж місті, де зберігається хоча б одна поставляється ними деталь. Не важко визначити, що це завдання володіє надмірністю інформації. Сучасні оптимізатори в змозі оптимізувати запит, перевіряючий всі умови задачі, за допомогою семантичної інформації про те, що принтери можуть перебувати тільки на Московських складах, до вигляду: "Визначити постачальників з Москви, що постачають виключно принтери". p align="justify"> 2.3 Генерація і вибір плану виконання
Розглянуті вище методи оптимізації мають на меті мінімізації кількості дій у виразах, і, якщо це необхідно, заміни деяких висловів на еквівалентні, але мають менший час виконання. Після цих перетворень необхідно згенерувати послідовність елементарних операцій, яка, в кінцевому підсумку, дасть коректний результат. Процедурним поданням або планом виконання запиту називається послідовність операцій, необхідних для отримання результату SQL-запиту в реляційної СУБД. Як правило, будь-який запит може мати кілька альтернативних планів виконання. Критерієм вибору плану виконання запиту є мінімізація вартості виконання, яка визначається часом виконання запиту. p align="justify"> У загальному випадку, стадія оптимізації, розглянута в цій главі, ділиться на два наступних етапи:
1. знайти набір потенційно можливих планів виконання для даного запиту, керуючись внутрішнім поданням запиту та інформацій, що характеризує керуючі структури бази даних (наприклад, індекси);
2. вибрати з можливих планів виконання, відібраних на стадії з попереднього пункту, план, що має найменшу вартість виконання.
При пошуку планів виконання, оптимізатор запитів повинен генерувати достатній набір планів, щоб у ньому містився оптимальний план, і, в той же час, досить помірний, щоб утримати накладні витрати на прийнятному рівні. Наведемо приклад простого запиту і генерації для нього планів виконання:
SELECT * FROM T1T1.A> 20 AND T1.B <10000
Для цього запиту можуть бути згенеровані наступні плани виконання:
послідовне сканування таблиці T1 з вибіркою кортежів задовольняють умові предиката;
сканування за індексом поля A, у разі якщо воно індексовано, з перевіркою отриманих кортежів на відповідність умові T1.B <10000;
сканування за індексом поля B, у випадку якщо воно індексовано, з перевіркою отриманих кортежів на відповідність умові A> 20;
сканування за індексами полів A і B, у випадку використання по цих полях кластерного індексу.
Оптимізатор використовує так званий вартісної метод для визначення найкращого плану виконання запиту. Оптимізатор оцінює вартість або витрати на роботу про...