Hlavní navigace

Názor ke článku Problémy optimalizace SQL dotazů a jejich teoretická řešení od Miroslav Šilhavý - To se přeci vůbec nevylučuje. Data máte v...

  • 25. 2. 2020 10:30

    Miroslav Šilhavý

    To se přeci vůbec nevylučuje. Data máte v databázi normalizovaná (např. tabulka rodičů <-reference tabulka dětí). U dětí máte evidovaný věk, pohlaví.

    Když potřebujete zjistit, kteří rodiče mají aspoň jedno dítě pod osmnáct let, je situace ještě triviální.
    Ve chvíli, kdy budete potřebovat složitější operace - např. najdi rodiče, kteří mají aspoň tři děti a aspoň jedno je mladší než osmnáct let, tak už se nabízí víc postupů, jak se k výsledku dostat. Např. nejdříve vyhodnotíte podmínku jednoho dítěte <18 a poté zjistíte počet dětí; nebo to vyhodnotíte v opačném pořadí. U složitějších dotazů se začne nabízet násobně více postupů (query plans) vedoucích ke stejnému výsledku.

    Pokud je v něčem síla moderních SQL databází, tak je to právě v tom, že Vám:
    1. umějí odhalit úzká hrdla (EXPLAIN [ANALYZE]),
    2. umějí odhalit rozdíl odhadů, které vycházejí ze statistik vs. realita (EXPLAIN vs. EXPLAIN ANALYZE),
    3. dají nástroje (INDEX, CLUSTER, PARTITION BY, ...) kterými nastavíte správnou cestu na vykonání dotazu

    Přesně jak Pavel psal, a do kamene tesat: SQL dotaz definuje výsledek – nikoliv způsob, jak se k žádanému výsledku dostat. Vůbec se to však nevylučuje s tím, že máte v ruce všechny nástroje, jak data v databázi správně nastavit. Úprava dotazů není tou cestou - správný server SQL by měl i odlišné dotazy, ale dávající stejný výsledek vnitřně vykonat totožně.