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.

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 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.