602SQL-Úplná dokumentace Index  

Použití indexů neobsahujících hodnoty NULL

Indexy neobsahující hodnoty NULL mají pouze omezené využití při optimalizaci dotazů. Použijí se pro vyhledání záznamů vymezených podmínkami:

Indexy neobsahující hodnoty NULL se nepoužijí pro setřídění záznamů podle hodnoty indexového klíče (ORDER BY) ani pro vyhledání záznamů vymezených podmínkami:

protože mezi záznamy nalezenými pomocí indexu by chyběly ty, jejichž indexový klíč má hodnotu NULL.

Pro zajištění efektivního vyhodnocování dotazů je proto lepší využívat indexů obsahujících i hodnoty NULL.

Pokud je třeba pro stejný indexový klíč efektivně vyhledávat záznamy, hlídat unikátnost hodnot klíče a povolit duplicity pro hodnotu NULL, pak je třeba vytvořit dva indexy: jeden neunikátní obsahující hodnoty NULL (pro vyhledávání) a druhý unikátní neobsahující hodnoty NULL (pro kontrolu unikátnosti):

INDEX (column) NULL,
UNIQUE (column) NOT NULL

Chybné vyhodnocení dotazů v režimu kompatibility se staršími verzemi

Je-li zapnut příznak kompatibility SQLOPT_NULLEQNULL, pak výsledek porovnání dvou hodnot NULL je TRUE. To může vést k chybnému vyhodnocení jisté třídy dotazů nad tabulkami, které mají indexy neobsahující hodnoty NULL.

Jde o dotazy obsahující podmínku ve tvaru:

sloupec=hodnota
kde sloupec má v tabulce index neobsahující hodnoty NULL a hodnota je dynamický parametr, proměnná klienta, proměnná v SQL rutině, jiný sloupec nebo výraz. Pokud proměnná nabude hodnoty NULL, pak pokud optimalizátor dotazů používá index pro sloupec neobsahující hodnoty NULL, odpověď na dotaz nebude obsahovat záznam, v němž sloupec má hodnotu NULL.

Řešením je kterýkoliv z těchto postupů: