Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
mgr-szz:in-pos:3-pos [2019/06/13 20:29] lachmanfrantisek indexy, hašování |
mgr-szz:in-pos:3-pos [2020/04/12 16:56] (aktuální) |
||
---|---|---|---|
Řádek 565: | Řádek 565: | ||
Postup zpracování a optimalizace dotazu: | Postup zpracování a optimalizace dotazu: | ||
- | - dotaz | + | - Převod dotazu na **syntaktický strom** pomocí parseru. |
- | - syntaktický strom dotazu | + | - Převod na **logický plán** ve formě výrazů relační algebry. |
- | - logický plán dotazu - v pojmech relační algebry | + | - Aplikací transformačních pravidel (viz níže) vznikne **vylepšený logický plán** |
- | - vylepšený logický plán dotazu | + | - Odhad ceny provedení na základě různých statistik (počet záznamů, velikost záznamů, počet unikátních hodnot, ...). |
- | - logický plán dotazu s velikostmi - v PostgreSQL lze zobrazit příkazem EXPLAIN | + | - **logický plán dotazu s velikostmi** - v PostgreSQL lze zobrazit příkazem EXPLAIN |
- | - fyzický plán dotazu | + | - Transformace na **fyzický plán** určující pořadí operací. |
- | - vyhodnocení | + | - Výběr nejlevnějšího **fyzické plánu** (velikost výsledků, počet V/V operací). |
- | + | - Vyhodnocení vybraného **fyzického plánu**. | |
- | Dotaz se nejprve pomocí parseru převede na syntaktický strom reprezentující strukturu dotazu. Ten se po té zpracuje do výrazů relační algebry (logický plán dotazu). Pomocí transformačních pravidel (kombinace přirozeného spojení, kartézského součinu, sjednocení, selekce a projekce) dále vznikne vylepšený logický plán. Nyní se za pomocí různých statistik (počet záznamů, velikost záznamů v bajtech, počet obsazených bloků, počet unikátních hodnot daného atributu) odhadnou velikosti výsledků, které ovlivňují odhad ceny provedení. Následně se logický plán transformuje na fyzický plán, který určí pořadí operací nutných k vykonání. Porovnají se různé fyzické plány, odhadnou se náklady (velikost výsledků, počet V/V operací) a zvolí se nejlevnější. Nakonec se daný plán provede a tím se získá výsledek. | + | |
=== Transformační pravidla === | === Transformační pravidla === | ||
- | * Přirozené spojení, kartézský součin, sjednocení, průnik | + | = Transformační vztahy relační algebry zachovávající výsledek. Mohou ale zefektivnit samotné vyhodnocování. |
+ | |||
+ | |||
+ | * Přirozené spojení + kartézský součin a sjednocení + průnik | ||
* Protože jsou všechny atributy zachovány, není pořadí důležité. | * Protože jsou všechny atributy zachovány, není pořadí důležité. | ||
Řádek 636: | Řádek 638: | ||
* Techniky přepsání dotazu | * Techniky přepsání dotazu | ||
- | * Použití indexů | ||
* Rušení nadbytečných DISTINCT | * Rušení nadbytečných DISTINCT | ||
* (Korelované) poddotazy | * (Korelované) poddotazy | ||
Řádek 642: | Řádek 643: | ||
* Používání HAVING | * Používání HAVING | ||
* Používání pohledů (VIEW) | * Používání pohledů (VIEW) | ||
+ | * Použití indexů | ||
* Uložené pohledy (materializedviews) | * Uložené pohledy (materializedviews) | ||
+ | |||
* Vytvoření indexu | * Vytvoření indexu | ||
Řádek 681: | Řádek 684: | ||
- | + | <box 90% blue|klíče> | |
- | + | **super klíč** = množina atributů jednoznačně určující každý záznam | |
- | + | **kandidátský klíč** = super klíč bez nadbytečných atributů | |
- | + | **primární klíč** = právě jeden vybraný kandidátský klíč | |
- | + | </box> | |
- | + | ||
- | + | ||