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.