17. K čemu slouží indexy
S indexy jsme se již v minulých dílech tutoriálu několikrát setkali. Nyní nastal čas, abychom si o nich pověděli více.Indexy slouží k zefektivnění procházení tabulek. Pokud máme opravdu rozsáhlé tabulky, vyhledávání v nich začně být (výkonově a časově) náročná operace. Technicky je index pomocná datová struktura, která se váže k určité tabulce a která databázi říká, kde zhruba se požadované záznamy nachází. Pokud bychom žádné indexy v tabulce nepoužili, musí databázový systém projít úplně všechny řádky.
Index si můžeme představit jako katalog knih v knihovně. Pokud bychom neměli žádný katalog a hledali konkrétní knihu, museli bychom projít všechny regály a podívat se na každou knihu. Pokud ale budeme mít index - katalog, najdeme v něm že naše kniha se nechází v regálu C v druhé poličce odzhora - teď už musíme projít pouze jedinou poličku knih abychom našli tu naši.
Možná si říkáte, proč tedy automaticky všechny sloupce ve všech tabulkách nemají indexy? Indexy mají jak se dá očekávat i své nevýhody. Velmi efektivně zrychlují operaci vyhledávání, je to ale na úkor rychlosti vkládání/aktualizace/mazání dat.
Paralela s knihovnou se opět hodí. Pokud bychom katalog neměli, můžeme novou knihu vložit na nejbližší místo, zkrátka kamkoliv. Pokud ale máme nějaká katalogová pravidla, musíme najít vhodný regál a poté danou poličku, kam nová kniha podle svých vlasností patří. Takové hledaní nám už zabere nějaký čas a zabere nám ho tím více, čím více knih v celé knihovně již máme.
Čím více záznamů tabulka s indexem obsahuje, tím vyšší je čas vložení nového záznamu
Druhy indexů v MySQL
MySQL nám umožnuje využít několik druhů indexů, každý s jiným speciálním účelem:- INDEX - základní obecný typ indexu bez specializace. Jeho hlavním smyslem je efektivní vyhledávání v tabulce
- PRIMARY - primární index (klíč) může být v tabulce pouze na jediném sloupci. Slouží k jednoznačné identifikaci řádku a proto hodnota každého řádku musí být unikátní a zároveň ne NULL. Je vhodné aby každá tabulka svůj primární klíč měla.
- UNIQUE - kromě základní funkce indexu určuje, že žádná hodnota v daném sloupci nesmí být vícekrát. Pokud se pokusíme tento index vytvořit na sloupci, který již obsahuje neunikátní data, příkaz selže.
- FULLTEXT - tento typ indexu slouží k fulltextovému vyhledávání. Abychom nad sloupcem mohli fulltextové hledání využít, musí mít nastaven tento index.
- SPATIAL - slouží pro speciální typ prostorových dat (geometrie), v běžných situacích se příliš nevyužívá.
Vytváření indexu
Vytváření a rušení indexu není příliš běžnou akcí, proto k tomuto účelu budete pravděpodoně nejčastěji využívat nějaký systém pro správu databáze. Pro úplnost si ale uvedeme i příkaz:ALTER TABLE knihy ADD INDEX (nazev);
Tímto příkazem vytvoříme v naší tabulce index na sloupcem nazev, což davá smysl. Název je patrně jedno z nejčastějších hledisek, podle kterého bychom knihu vyhledávali. Index pak můžeme zrušit takto:
ALTER TABLE KNIHY DROP INDEX nazev;
V příkazu vidíme menší nesoulad. Narozdíl od vytváření se zde nepoužívají závorky. Indexy můžeme vytvářet již při definici tabulky, nebo kdykoliv později ikdyž již tabulka obsahuje data.
Pokud vkládáme obrovské množství dat, je efektivnější předtím index zrušit a po vložení opět vytvořit.
V tomto článku jsme si vysvětlili k čemu indexy jsou a jak je vytvořit. Nemůžeme ale indexy rozházet po sloupcíh jen tak náhodně, přístě si proto vysvětlíme jaká by měla být logika vytváření indexů abychom využívali databázi co nejefektivněji.
Další díly tutoriálu
15. Operace nad vybranými daty16. Výběr dat - co se jinam nevešlo
17. K čemu slouží indexy
18. Jak správně používat indexy
19. Transakce