Изменения
Нет описания правки
== Обработка запроса ==
=== Мотивирующий пример ===
Пусть есть следующая база данных:
<var>Students(SId, FirstName, LastName, GId, Year)</var>
* $10^4$ записей
* Индексы: <var>(SId)</var> (кластеризованный), <var>(GId)</var>
<var>Groups(GId, Name)</var>
* $10^3$ записей
* Индексы: <var>(GId)</var> (кластеризованный), <var>(Name)</var>
И следующий запрос:
Фамилии студентов группы M3439
select LastName
from Students natural join Groups
where Name = 'M34391'
Планы запросов без индексов
План 1
* $π_{FirstName}(σ_{Name=M34391}(σ_{S.GId=G.GId}(S × G)))$
* $10^4·10^3 + 10^4·10^3 + 10^4 + 20 ≈ 2·10^7$ операций
План 2
* $π_{Name}(σ_{Name=M34391}(S ⋈ G))$
* $10^4·10^3 + 10^4 + 20 ≈ 10^7$ операция
План 3
* $π_{Name}(S ⋈ σ_{Name=M34391}(G))$
* $10^3 + 10^4 + 20 ≈ 10^4$ операций
Планы запросов с индексами
План 4. <var>Students(GId)</var>
* $π_{Name}(S ⋈ σ_{Name=M34391}(G))$
* $10^3 + (3 + 20) + 20 ≈ 10^3$ операций
План 5. <var>Groups(Name)</var>, <var>Students(GId)</var>
* $π_{Name}(S ⋈ σ_{Name=M34391}(G))$
* $2 + (3 + 20) + 20 ≈ 45$ операций
От выбора плана сильно зависит производительность
Наиболее медленный план $2·10^7$ операций
Наиболее быстрый план $45$ операций
=== Обработка запроса ===
== Перезапись запроса ==