O otimizador acha que a varredura completa da tabela será melhor.
Se houver apenas alguns
NULL
linhas, o otimizador está certo. Se você tiver certeza absoluta de que o acesso ao índice será mais rápido (ou seja, você tem mais de
75%
linhas com col1 IS NULL
), em seguida, indique sua consulta:SELECT /*+ INDEX (t index_name_on_col1) */
*
FROM mytable t
WHERE col1 IS NOT NULL
Por que
75%
? Porque usar
INDEX SCAN
recuperar valores não cobertos pelo índice implica uma junção oculta em ROWID
, que custa cerca de 4
vezes mais do que a varredura de tabela. Se o intervalo do índice incluir mais de
25%
de linhas, a verificação da tabela geralmente é mais rápida. Conforme mencionado por
Tony Andrews
, o fator de agrupamento é um método mais preciso para medir esse valor, mas 25%
ainda é uma boa regra.