|
![]() | Použití indexů v dotazech na prefix | ![]() | Indexy k databázovým tabulkám | Příkaz CREATE INDEX | ![]() |
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:
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
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=hodnotakde 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ů:
![]() | Použití indexů v dotazech na prefix | ![]() | Indexy k databázovým tabulkám | Příkaz CREATE INDEX | ![]() |