Takédatabázový indexPokročilý

Definice

Index je pomocná datová struktura, která databázi umožní najít řádky podle hodnoty sloupce bez procházení celé tabulky. Zrychluje čtení, zpomaluje zápis a zabírá místo, takže každý index je vědomý kompromis.

Kategorie: DatabázeAktualizováno

Nezaměňujte: Slovo index má i další významy: pozice prvku v poli, hlavní soubor webu index.html nebo burzovní index. Tady jde o databázovou strukturu.

Proč to funguje

Bez indexu musí databáze při hledání projít každý řádek. S indexem má seřazenou strukturu, ve které se dá půlit interval, takže z milionu řádků se dostane k tomu správnému zhruba dvaceti kroky.

Co to stojí

Každý zápis musí aktualizovat nejen tabulku, ale i všechny její indexy. Tabulka s deseti indexy má proto zápis znatelně dražší. Index navíc zabírá místo na disku i v paměti.

Platí jednoduché pravidlo: index se zakládá kvůli konkrétnímu dotazu. Index, ke kterému neumíte říct, který dotaz obsluhuje, je čistá režie.

Příklady z praxe

  1. Vyhledávání podle e-mailu

    Tabulka uživatelů s milionem řádků a dotaz na konkrétní e-mail. Bez indexu projde databáze všechny řádky, s indexem nad sloupcem e-mail najde ten správný prakticky okamžitě.

    CREATE UNIQUE INDEX users_email_idx ON users (email);

Časté omyly

MýtusČím víc indexů, tím rychlejší databáze.
Ve skutečnostiJen pro čtení, a jen pro dotazy, které index skutečně použijí. Nadbytečné indexy zpomalují každý zápis, zabírají paměť a mohou plánovači zkomplikovat výběr toho správného. Nepoužívaný index je čistá ztráta.
MýtusIndex nad každým sloupcem ve WHERE stačí.
Ve skutečnostiU dotazu, který filtruje podle několika sloupců a ještě řadí, bývá jeden dobře poskládaný složený index výrazně účinnější než několik samostatných. Na pořadí sloupců v takovém indexu záleží.

Časté dotazy

Jak poznám, že dotaz index používá?
Většina databází nabízí příkaz, který ukáže plán vykonání dotazu, v PostgreSQL a MySQL je to EXPLAIN. V plánu hledáte, jestli se čte přes index, nebo jestli se prochází celá tabulka. Průchod celou tabulkou u velkého dotazu znamená, že index chybí nebo ho nelze použít.

Zdroje

  1. Indexes(otevře se v novém okně)PostgreSQL, 2026

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.