Изменения
→Обработка запроса
== Обработка запроса ==
От выбора плана '''сильно''' зависит производительность
=== Мотивирующий пример ===
==== Пример базы данных: ====
Пусть у нас есть база данных Университет.
** $10^4·10^3 + 10^4 + 20 ≈ 10^7$ операция
Сначала отфильтруем группы. Это обработать $1000 $ групп. Выберем из них 1 группу. Потом переберем $10^4$ студентов. И финальная проекция на $20 $ элементов.Снизили время на $3 $ порядка!
* План 3
** $π_{Name}(S ⋈ σ_{Name=M34391}(G))$
==== Планы запросов с индексами ====
Аналогично плану 3, только теперь не перебираем всех студентов, а достаем их из индекса. Если был индекс на основе B дерева глубины $3$. Мы дошли до его листа и достали примерно $20 $ студентов из группы. Осталось сделать проекцию, а это еще $20 $ операций. В итоге снизили время еще на порядок.
* План 4. <var>Students(GId)</var>
** $π_{Name}(S ⋈ σ_{Name=M34391}(G))$
** $10^3 + (3 + 20) + 20 ≈ 10^3$ операций
Поиск группы тоже можем ускорить, так как есть индекс по имени группы. Он скорее всего поместится в памяти, оценим его глупину как $2$. К этому нам нужно достать инфомрацию об одной из групп. Итого нашли конкретнуб группу, потом сделаем соединение с помощью индекса по GroupId в студентах и финальная проекция.
* План 5. <var>Groups(Name)</var>, <var>Students(GId)</var>
** $π_{Name}(S ⋈ σ_{Name=M34391}(G))$