Изменения
→Обработка запроса
=== Обработка запроса ===
По большому счету sql базы данных отличаются двумя вещами - то, как они поддерживают транзакции и то, насколько хорошо у них умеет работать планировщик запросов.
Общий план:
* На вход приходит sql.
* Отправляем его в разборщик запросов(парсер). Он на выходе выдаст реляционную алгебру.
* Затем планировщик запроса снабжает операции реляционной алгебры информацией о том как он собирается их исполнять и в каком порядке.
* Реляционная алгебра передается в исполнитель запроса, который ее исполняет. Исполнитель запроса взаимодействует с источником данных в тот момент, когда ему понадобились данные для исполнения запросов.
Планировщики делятся на две части:
==== Перезапись и планировщик ====
Перезапись запроса. Составляет некоторый набор фиксированных правил, которые не зависят от конкретного запроса
*Перезапись запроса
** Статические правила оптимизации запроса
** СчитаетсяСУДБ считает, что оптимизации полезны всегда. Если видит возможность применить правило, то применяет всегда.
Планировщик запроса. Занимается более интеллектуальными вещами, например выбор структуры, выбор методов исполнения. Он очень сильно зависит от модели оценки, которая позволяет ему достаточно точно оценивать объем результатов, которые он должен получить.
*Планировщик запроса
** Оптимизация Принимает решение об оптимизации в зависимости от данных. Может посмотреть например на информацию из индексов. ** Перебор вариантовВ отличии от перезаписи запросов, когда у нас есть формальные правила что и когда нужно делать, планировщику часто приходится перебирать различные варианты исполнения
==== Выбор структуры и метода ====
*Выбор При выборе структуры:** Преобразование запросаПланировщик преобразует запрос. Тут сильно помогают свойства реляционной алгебры, которые позволяют строить альтернативные эквивалентные варианты исполнения** Порядок Планировщик выбирает порядок выполнения операций** Порядок Планировщик выбирает порядок соединений
*Выбор метода исполнения
** Как исполняется каждая Для каждой операции планировщик решает каким конкретно способом операциядолжна быть исполнена В итоге получается, что планировщик строит конкретный план, но обычно он строит много различных планов и ему нужно оценить, какой из этих планов будет самым быстрым
==== Оценка плана ====
Для оценки эффективности плана у планировщика есть ''модель стоимости''
*Модель стоимости
** Стоимость Есть стоимость операции** Размер операндовЕсть формулы, которые пересчитывают стоимость операций в зависимости от входных** Размер результатаЕсть формулы, которые пересчитывают стоимость в зависимости от ожидаемых выходных данных
*Оценка размера и распределения
** Статистика Часто используется статистика по данным** Статистика Часто используется статистика предыдущих запросов
== Перезапись запроса ==