Index (databáze)
Z Wikipedie, otevřené encyklopedie
Index je databázový objekt, který slouží ke zrychlení vyhledávacích a dotazovacích procesů v relační databázi.
Obsah |
[editovat] Definování indexu
Index je obvykle definován výběrem tabulky a jejích konkrétních sloupců, nad kterými je třeba dotazování urychlit, dále pak technickým určením typu, chování a způsobu uložení indexu, které se významně liší podle použité databázové technologie.
Vyjímku mohou tvořit například full-textové indexy, které jsou v některých případech (nerelační databáze typu Lotus Notes) definovány nad celou databází, nikoliv nad konkrétní tabulkou.
[editovat] Funkce indexu
Vytvoření indexu (například pomocí DDL SQL příkazu CREATE) znamená, že databázový server zarezervuje pro požadovaný index určitou část paměťového prostoru a uloží do něj informace o rozmístění hodnot indexovaných sloupců v tabulce (obvykle ve strojové a pro člověka naprosto nečitelné podobě, která závisí na použitých vnitřních indexových algoritmech). Pokud později dojde k dotazu (například pomocí příkazu SELECT nebo použitím pohledu), který se týká indexovaných sloupců, není tabulka prohledávána řádek po řádku, ale pomocí informací uložených v paměťovém prostoru indexu je přistupováno přímo k relevantním řádkům tabulky - dalo by se říct, že index funguje trochu podobně jako rejstřík v knize.
[editovat] Použití indexu
Na první pohled by se mohlo zdát, že čím víc indexů, tím lepší chování databáze - nejlépe vytvořit indexy pro všechny sloupce všech tabulek a vše poběží jako po másle. Tento přístup naráží bohužel na dva zásadní problémy:
- Každý index zabírá v paměti vyhrazené pro databázi nezanedbatelné (vzhledem k paměti vyhrazené pro tabulku) množství místa. Při existenci mnoha indexů se snadno může stát, že paměť zabraná jejími indexy je skoro stejně velká, jako paměť zabraná jejími daty - zvláště u rozsáhlých tabulek (typu faktových tabulek v datovém skladu) může něco takového být nepřijatelné.
- Každý index zpomaluje operace, které mění obsah indexovaných sloupců (například SQL příkazy UPDATE, INSERT). To je dáno tím, že databáze se v případě takové operace nad indexovaným sloupcem musí postarat nejen o změny v datech tabulky, ale i o změny v datech indexu.