Optimalizátor se domnívá, že úplné skenování tabulky bude lepší.
Pokud existuje jen několik NULL řádků, má optimalizátor pravdu.
Pokud jste si naprosto jisti, že přístup k indexu bude rychlejší (to znamená, že máte více než 75% řádky s col1 IS NULL ), poté naznačte svůj dotaz:
SELECT /*+ INDEX (t index_name_on_col1) */
*
FROM mytable t
WHERE col1 IS NOT NULL
Proč 75% ?
Protože pomocí INDEX SCAN pro načtení hodnot, které index nepokrývá, znamená skryté spojení na ROWID , což stojí asi 4 krát tolik než skenování tabulky.
Pokud rozsah indexu zahrnuje více než 25% řádků je prohledávání tabulky obvykle rychlejší.
Jak zmínil Tony Andrews , shlukovací faktor je přesnější metodou měření této hodnoty, ale 25% je stále dobré pravidlo.