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.