Optimalizace databázových dotazů, aneb zrychlete svoje aplikace

Pokud se věnujete i tvorbě složitějších databázových aplikací, určitě jste se s problémem rychlosti, respektive výkonu databázových dotazů nejednou setkali. Optimalizace databázových dotazů se často zužuje pouze na jejich rychlost, nicméně v obecné rovině se jedná o celou řadu parametrů, které je možné ovlivňovat. Např. propustnoust aplikace, zatížení databázového serveru a pod. Vzhledem k tomu že většinu parametrů je možné ovlivňovat konfigurací databázového serveru (a ta je v případě klasických hostingů značně omezena), zaměříme se v tomto článku především na zrychlení databázového dotazu jeho restrukturalizací a použitím vhodných databázových objektů jako jsou index a pod.

Přístupové metody databázového serveru

Pod pojmem přístupové metody rozumíme způsoby, jakými databázový server zpřístupňuje řádky jednotlivých tabulek. Níže jsou uvedeny dvě základní metody prohledávání tabulek:

  • Úplné prohledávání - fuguje tak, že databázový server čte řádek po řádku a kontroluje, zda načtený řádek odpovídá podmínkám v klauzuli WHERE. Aby databázový server našel jeden konkrétní řádek, musí v případě úplného prohledávání server projít průměrně 50 všech řádků tabulky.
  • Indexové prohledávání - v tomto případě dochází k traverzování stromovou strukturou indexu až do chvíle, kdy jsou nalezeny řádky vyhovující podmínce WHERE. Počet bloků, které musí databázový server v tomto případě zpřístupnit je úměrný výšce stromu indexu (většinou 3 bloky).

Indexy

Využití indexů je zřejmě nejjednodušší a téměř povinnou metodou pro zrychlení chodu databázové aplikace. Index je jakási zeštíhlená verze tabulky uspořádaná většinou do datové struktury B tree, jedná se tedy o strom. Vyhledávání pomocí indexové struktury je výhodné v případě, kdy hledáme malý počet řádků dané tabulky - uvádí se cca 5% všech záznamů.

Index může být vytvořen nad jedním, nebo více sloupci. Je vhodné vytvářet indexy nad sloupci, které se často objevují v podmínce where a především nad sloupci, přes které probíhí spojení tabulek (tedy nad sloupci cizích klíčů). Standardně bývá index automaticky vytvořen nad sloupce primárního klíče.

 

Tolik tedy k teoretickému úvodu do problematiky optimalizace databázových aplikací. V příštím článku si ukážeme některé praktické příklady.