// Kradeno z https://github.com/Krejdom/school_notes/blob/master/PB154.md 

Zpracovávání dotazů

  1. parsování a překlad – překlad do interní formy a následně do relační algebry, kontrola syntaxe a verifikace vztahů
  2. optimalizace – vybere mezi všemi ekvivalentními plány evaluace ten s nejnižšími nároky (čas na zodpovězení dotazu: seeks, blocks transfers)
  3. vyhodnocení – plán evaluace dotazů

Schéma procesu zpracování dotazu

Operace selekce

Algoritmus A1

Binární vyhledávání nemá smysl, protože data nejsou seřazena.

Algoritmus A2

Algoritmus A3

Algoritmus A4

Selekce s porovnáváním

Algoritmus A5

Algoritmus A6

Algoritmus A7

Algoritmus A8

Algoritmus A9

Algoritmus A10

Sorty

Externí merge-sort

  1. vytvoř uspořádané části, i=0
    • načti M (velikost paměti ve stránkách) bloků relace do paměti
    • setřiď vnitřní paměťové bloky
    • zapiš data a zvyš i
  2. mergni části, N<M
    • použij N bloků paměti na buffer vstupních částí + 1 blok na buffer výstup
    • načti první blok každé části do buffer stránky
    • opakuj: vyber první záznam (v setříděném pořadí) ze všech buffer stránek, zapiš jej na output buffer, smaž záznam z jeho vstupního bufferu, pokud jsou buffer stránky, načti další blok
    • dokud nejsou všechny buffer stránky prázdné

Joiny

Nested-Loop Join

Slouží k výpočtu theta joinu.

pro každou n-tici tr z relace r:
    pro každou n-tici ts z relace s:
        otestuj, jestli dvojce (tr,ts) splňuje podmínku theta,
        pokud ano, přidej jejich tr.ts do výsledku

r je vnější relace a s je vnitřní relace

Block Nested-Loop Join

To stejné jako Nested-Loop Join, akorát nejdřív dvěma vnořenými cykly prochází celé bloky relací a až pak z nich prochází n-tice.

Hash-join

Eliminace duplicit

Projekce

Agregace

Množinové operace

Optimalizace dotazů

Změna relačních výrazů

  1. Konjunktivní selekce, může být rozdělena na posloupnost selekcí

σ θ1∧θ2 (E) = σ θ1 (σ θ2 (E))

  1. Operace selekce jsou komutativní

σ θ1 (σ θ2 (E)) = σ θ2 (σ θ1 (E))

  1. V posloupnosti projekcí je potřebná pouze poslední. (Zbytek může být vynechán)

Π L1 (Π L2 (...(Π Ln (E))...)) = (Π Ln (E)

  1. Selekce se může kombinovat s Kartézským součinem a theta join.

σ θ (E1 × E2) = E1 ⋈θ E2

σ θ1 (E1 ⋈θ2 E2) = E1 ⋈θ1∧θ2 E2

  1. Theta-join (a přirozené spojení) jsou komutativní.
  2. . a) Přirozené spojení jsou operace asociativní