Uživatelské nástroje

Nástroje pro tento web


indexovani

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.

indexovani.txt · Poslední úprava: autor: admin