Изменения

Перейти к: навигация, поиск

Этапы обработки запроса. Перезапись запросов

5074 байта добавлено, 10:53, 20 декабря 2021
Новая страница: « ---- Минимизация набора операций Преобразование подзапросов Преобразуются в реляционн…»

----

Минимизация набора операций

Преобразование подзапросов

Преобразуются в реляционную алгебру

Запись в реляционном исчислении

Вынос кванторов

Преобразование в алгебру

Преобразование соединений

Внешние соединения

$R_1 \ojoin_θ R_2 ⇒ (R_1 \ljoin_θ R_2) ∪ (R_1 \rjoin_θ R_2)$

$R_1 \ljoin_θ R_2 ⇒ σ_θ(R_1 × R_2) ∪ (R_1 - π_{R_1}(σ_θ(R_1 × R_2)))$

$R_1 \rjoin_θ R_2 ⇒ σ_θ(R_1 × R_2) ∪ (R_2 - π_{R_2}(σ_θ(R_1 × R_2)))$

Декартово соединение

$R_1 × R_2 ⇒ R_1 ⋈ R_2$

----
Унарные операции

Повторная фильтрация

Правило

Повторное применение фильтрации заменяется одинарным

$σ_{cond_1}(σ_{cond_2}(R)) ⇒ σ_{cond_1 ∧ cond_2}(R)$

Пример

$π_{FirstName}(σ_{Name=M34391}(σ_{S.GId=G.GId}(S × G))) ⇒ π_{FirstName}(σ_{Name=M34391 ∧ S.GId=G.GId}(S × G))$


Повторная проекция

Правило

Повторное применение проекции заменяется внешней

$π_{A}(π_{B}(R)) ⇒ π_{A}(R)$

Пример

$π_{FirstName}(π_{FirstName, Name}(S × G)) ⇒ π_{FirstName}(S × G)$

Проекция и фильтрация

Правило

Фильтрация осуществляется до проекции

$σ_{cond}(π_{A}(R)) ⇒ π_{A}(σ_{cond}(R))$


Пример

$π_{FirstName}(σ_{Name=M34391}(π_{FirstName, Name}(S × G))) ⇒ $

$π_{FirstName}(π_{FirstName, Name}(σ_{Name=M34391}(S × G))) ⇒ $

$π_{FirstName}(σ_{Name=M34391}(S × G))$

Так можно делать всегда


----


Алгебраические свойства операций

Дистрибутивность операций

Фильтрация

$σ_{cond}(R_1 ∪ R_2) ⇒ σ_{cond}(R_1) ∪ σ_{cond}(R_2)$

$σ_{cond}(R_1 \cap R_2) ⇒ σ_{cond}(R_1) \cap σ_{cond}(R_2)$

$σ_{cond}(R_1 - R_2) ⇒ σ_{cond}(R_1) - σ_{cond}(R_2)$

$σ_{cond_1 ∧ cond_2}(R_1 ⋈ R_2) ⇒ σ_{cond_1}(R_1) ⋈ σ_{cond_2}(R_2)$

Проекция

$π_A(R_1 ∪ R_2) ⇒ π_A(R_1) ∪ π_A(R_2)$

$π_A(R_1 ∩ R_2) ⇏ π_A(R_1) ∩ π_A(R_2)$

$π_A(R_1 - R_2) ⇏ π_A(R_1) - π_A(R_2)$

$π_{A}(R_1 ⋈ R_2) ⇒ π_A(π_{(A ∪ R_2) ∩ R_1}(R_1) ⋈ π_{(A ∪ R_1) ∩ R_2}(R_2))$

Коммутативность операций

Коммутативные операции

$⋈$,
$∪$,
$∩$

Некоммутативные операции

$-$

$\div$, $\gdiv$

Применение коммутативности

Выбор левой и правой стороны для несимметричных методов исполнения

Ассоциативность операций

Ассоциативные операции

$⋈$,
$∪$,
$∩$

Неассоциативные операции

$-$

$\div$, $\gdiv$

Применение ассоциативности

Выбор порядка выполнения операций


----
Обработка условий

Замыкание предикатов

Примеры правил

$a = b ∧ b = c ⇒ a = b ∧ b = c ∧ a = c$

$a > b ∧ b = c ⇒ a > b ∧ b = c ∧ a > c$

$a > b ∧ b > c ⇒ a > b ∧ b > c ∧ a > c$

Пример

$σ_{P_1.p > P_2.p ∧ P_2.p ≥ 60}(P_1 ⋈_{P_1.SId = P_2.SId} P_2) ⇒$

$σ_{P_1.p > P_2.p ∧ P_2.p ≥ 60 ∧ P_1.p > 60}(P_1 ⋈_{P_1.SId = P_2.SId} P_2) ⇒$

$σ_{P_1.p > P_2.p}(σ_{p > 60}(P_1) ⋈_{P_1.SId = P_2.SId} σ_{p ≥ 60}(P_2))$

КНФ и ДНФ

Преобразование предикатов

Конъюнктивная нормальная форма

Дизъюнктивная нормальная форма


Вычисление КНФ

Слева направо, до первой лжи

Вычисление ДНФ

Слева направо, до первой истины


----

Семантические оптимизации

Семантическая оптимизация

Применение знания об ограничениях

Неэквивалентные запросы

Тот же результат

Пример

$π_{FirstName}(Students ⋈ Groups) ⇒ π_{FirstName}(Students)$, если $Students.GId ⊂ Groups.GId$

Пример оптимизации

Ограничение

У всех, кто получает стипендию все оценки ≥60

check not HasScolarship or 60 <=
all (select Points from Points where Points.SId = Id)

Запрос

Оценки стипендиатов группы M34391 по СУБД

select Points from Students natural join Points
where HasScolarship and CId = 10 and GId = M34391

$σ_{HasScolarship ∧ CId = 10}(Students ⋈ Points)$

Оптимизированный запрос

$σ_{GId=M34391 ∧ HasScolarship}(Students) ⋈⋈ σ_{60 ≥ Points ∧ CId = 10}(Points)$
Анонимный участник

Навигация