|
![]() | Popis sloupce tabulky | ![]() | Databázové tabulky | Integritní omezení v tabulce | ![]() |
Index je pomocná datová struktura, která podstatně urychluje například:
Každý index zachycuje uspořádání všech záznamů v tabulce podle určitého klíče. Tímto klíčem může být hodnota některého sloupce, hodnota výrazu nad sloupci, nebo posloupnost sloupců či výrazů.
Index může být spojen s pravidlem, které zakazuje duplicitu hodnot klíče - pak hovoříme o unikátním indexu.
Indexy nejsou součástí normy SQL, ale využívají se ve všech implementacích SQL. V současné verzi 602SQL je povoleno maximálně 24 indexů k jedné tabulce.
Použití indexů je zcela automatické. Způsob vyhodnocení dotazu uloženého na serveru a využití indexů lze zjistit stiskem tlačítka Optimalizace na řídicím panelu.
Seznam indexů vrací systémový dotaz _IV_INDICIES
Index se definuje příkazem CREATE TABLE nebo ALTER TABLE takto:
popis_indexu ::= { UNIQUE | PRIMARY KEY | INDEX } (výraz [směr] {, výraz [směr] }... ) [{ NULL | NOT NULL }] směr ::= ASC | DESCDefinování indexu pomocí CREATE INDEX má poněkud jinou syntaxi.
Indexy, jejichž klíčem je hodnota jednoho sloupce, lze alternativně specifikovat jako vlastnost sloupce.
Indexy označené UNIQUE nebo PRIMARY KEY jsou unikátní a neumožňují vložení do tabulky dvou záznamů se stejnou hodnotou klíče. Index označený INDEX povoluje duplicity v hodnotách klíče. Index PRIMARY KEY smí být v definici tabulky uveden pouze jednou a má zvláštní postavení.
V definici indexu lze specifikovat, zda se do něj mají zahrnovat i ty řádky z databázové tabulky, pro které je hodnota indexového klíče NULL. Je-li na konci popisu indexu uvedeno NULL, pak index obsahuje i klíče s hodnotou NULL, je-li uvedeno NOT NULL, pak je neobsahuje.
Není-li v definici indexu uvedeno NULL ani NOT NULL, pak záleží na typu indexu: neunikátní index bude moci obsahovat hodnoty NULL, zatímco unikátní index a primární klíč nebude obsahovat hodnoty NULL.
Vyloučit hodnoty NULL z indexu má smysl například tehdy, pokud index je unikátní, ale pro hodnotu NULL chceme povolit duplicity. Jsou-li z indexu vyloučeny hodnoty NULL, pak index nebude použit při optimalizaci agregační funkce MIN, predikátu IS NULL a řady podmínek v dotazech. Takový index nemusí urychlit vyhodnocení dotazu očekávaným způsobem - viz podrobnosti.
Příklad:
CREATE TABLE Tab (a INTEGER, b INTEGER, CONSTRAINT Ind_a UNIQUE (a) NULL, CONSTRAINT Ind_b INDEX (b DESC) NOT NULL)nebo
CREATE UNIQUE INDEX Ind_a ON Tab (a) NULL; CREATE INDEX Ind_b ON Tab (b DESC) NOT NULL;
Seznam subsekcí:
![]() | Popis sloupce tabulky | ![]() | Databázové tabulky | Integritní omezení v tabulce | ![]() |