El optimizador piensa que el escaneo completo de la tabla será mejor.
Si solo hay unos pocos NULL
filas, el optimizador tiene razón.
Si está absolutamente seguro de que el acceso al índice será más rápido (es decir, tiene más del 75%
filas con col1 IS NULL
), luego indique su consulta:
SELECT /*+ INDEX (t index_name_on_col1) */
*
FROM mytable t
WHERE col1 IS NOT NULL
¿Por qué 75%
? ?
Porque usando INDEX SCAN
recuperar valores no cubiertos por el índice implica una combinación oculta en ROWID
, que cuesta alrededor de 4
veces más que el escaneo de la tabla.
Si el rango del índice incluye más del 25%
de filas, el escaneo de la tabla suele ser más rápido.
Como lo menciona Tony Andrews
, el factor de agrupación es un método más preciso para medir este valor, pero 25%
sigue siendo una buena regla general.