Typy databázových indexů

Školení, která pořádám

V databázových systémech existují tři základní typy indexů: běžné, unikátní a primární. Běžný index zrychluje operace vyhledávání a třídění, unikátní index kromě toho zajišťuje unikátnost hodnot v daných sloupcích a primární klíč jednoznačně identifikuje každý řádek. Rozdíl mezi primárním a unikátním klíčem je jednak sémantický a jednak v tom, že primární klíč nesmí obsahovat hodnoty NULL, které mohou být jako jediné v unikátním klíči uloženy vícekrát. Každá tabulka může mít jeden primární klíč a kromě speciálních případů (např. jednořádková tabulka) by měl být vždy definován, aby se k jednotlivým záznamům dalo snadno přistupovat.

Kromě těchto základních případů se slovo index v MySQL používá také v souvislosti s fulltextovým vyhledáváním a zajištěním referenční integrity u tabulek typu InnoDB. Tam se používá syntaxe FOREIGN KEY (moje_sloupce) REFERENCES tabulka (cizí_sloupce) (mezi názvem odkazované tabulky a závorkou musí být mezera). Pokud se odkazujeme pouze na jeden sloupec, lze klauzuli REFERENCES uvést přímo za datový typ daného sloupce, v MySQL se však tato forma nebere v potaz. Při správně definovaných cizích klíčích databáze zajistí, že do odkazující tabulky nepůjde vložit hodnota, která se v odkazované tabulce nenachází, s využitím triggerů lze navíc aktualizace prováděné v daných tabulkách propojit.

Posledním typem indexů, které jsou v MySQL k dispozici, jsou geometrické indexy rozšíření Spatial.

Přijďte si o tomto tématu popovídat na školení Návrh a používání MySQL databáze.

Jakub Vrána, Výuka, 4.12.2006, diskuse: 1 (nové: 0)

Diskuse

finc:

Co se týče referenčních integrit, bylo by dobré ještě zmínit, že mohu mít v cizím klíči hodnotu NULL. Tím pádem lze uložit hodnotu, která se v odkazované tabulce nenachází. Samozřejmě s tím souvisí i chování vazby definující pomocí ON UPDATE a ON DELETE.
Navíc se používá i příkaz CONSTRAINT, který mi uvádí název vazby. Popisuji něco takového zde: http://finc.ic.cz/?p=4
Jinak, nevím jak v nižších verzích, ale ve verzi 5 nemusís mezi název odkazované tabulky a závorkou uvádět mezeru.
Jinak na tvorbu referenčních integrit se mi osvědčil MySQL Query, kde si přímo naklikám tu správnou vazbu bez nebezpečí překlepu.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.