La base de datos
Oracle usa tres diferentes métodos para aplicar los filtros (predicados) where
:
- Predicados de acceso
Los predicados de acceso expresan las condiciones de inicio y fin del recorrido del nodo hoja.
- El predicado de filtro sobre índice (“filtrar” las operaciones sobre índice)
Los predicados de filtro sobre índice sólo se aplican durante el recorrido del nodo hoja. No contribuyen a las condiciones de inicio y fin y no limitan el rango escaneado.
- Predicado de filtro a nivel de tabla (“filtrar” las operaciones sobre la tabla)
Los predicados sobre columnas no son parte del índice que se evalúan a nivel de tabla. Para que eso suceda, la base de datos debe cargar la fila desde la primera tabla.
Nota
Los predicados de filtro sobre índice dan una falsa impresión de seguridad; aunque se usa el índice, el rendimiento se deteriora rápidamente con un volumen de datos creciente o un sistema cargado.
Los planes de ejecución que fueron creados con la funcionalidad DBMS_XPLAN
(ver “Obtener un plan de ejecución”), muestran el uso del índice dentro de la sección “Información de predicados” bajo el cuadro del plan de ejecución:
------------------------------------------------------
| Id | Operation | Name | Rows | Cost |
------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1445 |
| 1 | SORT AGGREGATE | | 1 | |
|* 2 | INDEX RANGE SCAN| SCALE_SLOW | 4485 | 1445 |
------------------------------------------------------
Predicate Information (identified by operation id):
2 - access("SECTION"=:A AND "ID2"=:B)
filter("ID2"=:B)
La numeración de la información de predicado hace referencia al identificador “Id” de la columna del plan de ejecución. Ahí, la base de datos muestra también un asterisco para señalar las operaciones que tienen una información de predicado.
Este ejemplo, tomado del Capítulo “Rendimiento y escabilidad”, muestra un INDEX RANGE SCAN
que realiza predicados de acceso y de filtro. La base de datos Oracle tiene la peculiaridad de que muestra también el predicado de filtro como predicado de acceso; por ejemplo, ID2=:B
en el plan de ejecución anterior.
Importante
Si una condición aparece como un predicado de filtro, es un predicado de filtro; no importa si aparece también como predicado de acceso.
Esto significa que INDEX RANGE SCAN
escanea el rango entero para la condición "SECTION"=:A
y aplica el filtro "ID2"=:B
sobre cada fila.
Los predicados de filtro a nivel de tabla se muestran para el acceso a la tabla respectiva como TABLE ACCESS BY INDEX ROWID
o TABLE ACCESS FULL
.
Observe que diferentes herramientas muestran la información de predicados de manera distinta. Por ejemplo, Oracle SQL Developer muestra la información de predicado bajo la operación respectiva.
Figura A.1 Los predicados de acceso y de filtro en Oracle SQL Developer

Algunas herramientas no muestran la información de predicado en su globalidad. Recuerde que siempre se puede recurrir a DBMS_XPLAN
como se explica en “Obtener un plan de ejecución”.
Sugerencia
La sección “Mayor que, menor que y
BETWEEN
” explica la diferencia entre predicados de acceso y de filtro sobre el índice.El Capítulo 3, “Rendimiento y escalabilidad”, muestra las diferencias de rendimiento generadas entre los predicados de acceso y de filtro sobre un índice.