Obsah
Indexování v databázích
Indexování je proces vytváření pomocných datových struktur, které databázovému stroji umožňují najít konkrétní řádky v tabulce bez nutnosti procházet každý jednotlivý záznam (tzv. Full Table Scan). Bez indexů by vyhledávání v milionech záznamů trvalo sekundy nebo i minuty; s indexem je to otázka milisekund.
Jak index funguje?
Představte si tabulku „Uzivatele“ s 10 miliony řádků. Chcete najít uživatele podle e-mailu:
- Bez indexu: Databáze musí přečíst všech 10 000 000 řádků z disku a porovnat e-mail u každého z nich.
- S indexem: Databáze se podívá do samostatné, seřazené struktury (indexu), kde jsou e-maily uloženy spolu s „ukazateli“ na konkrétní místa na disku.
Datové struktury: B-Tree
Většina moderních databází (jako MySQL nebo PostgreSQL) používá pro indexy strukturu zvanou B-Strom (B-Tree). Tato struktura udržuje data seřazená a umožňuje vyhledávání s logaritmickou složitostí. To znamená, že i když se počet dat zdvojnásobí, počet kroků k nalezení záznamu se zvýší jen o jeden.
Typy indexů
| Typ | Popis |
|---|---|
| Primární index | Automaticky vytvořen pro primární klíč tabulky. Zajišťuje unikátnost. |
| Unikátní index | Zajišťuje, že ve sloupci nebudou dvě stejné hodnoty (např. e-mail nebo rodné číslo). |
| Složený index | Index vytvořený nad více sloupci najednou (např. Prijmeni + Jmeno). |
| Full-text index | Speciální index pro vyhledávání slov uvnitř dlouhých textů (článků). |
"Něco za něco": Cena za indexování
Indexy nejsou „zadarmo“. I když extrémně zrychlují čtení (Read), mají negativní dopady na jiné operace:
1. **Zpomalení zápisu (Write):** Při každém příkazu ''INSERT'', ''UPDATE'' nebo ''DELETE'' musí databáze aktualizovat nejen samotnou tabulku, ale i všechny přidružené indexy. 2. **Spotřeba místa:** Indexy jsou samostatné struktury uložené na disku. U velkých tabulek mohou indexy zabírat stejně nebo i více místa než samotná data.
Kdy indexovat a kdy ne?
Indexujte, pokud:
- Sloupec často používáte v podmínkách
WHERE. - Sloupec používáte k propojování tabulek (
JOIN). - Sloupec používáte pro řazení (
ORDER BY).
Neindexujte, pokud:
- Tabulka je velmi malá (vyhledávání v celém souboru je rychlejší než práce s indexem).
- Sloupec obsahuje velmi málo unikátních hodnot (např. sloupec „Pohlavi“).
- Do tabulky se neustále zapisuje obrovské množství dat a čtení je vzácné.
Související pojmy: SQL, RDBMS, MySQL, CRUD, B-Tree, Latence, Databáze.
