602SQL-Úplná dokumentace Index  

Indexy k databázovým tabulkám

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

Definování indexů

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 | DESC
Definová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í.

Hodnoty NULL v indexech

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í: