de Martin LE TARNEC.

Acceso distintivo y predicados de filtro


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 de fin del recorrido del nodo hoja.

El predicado de filtro sobre índice (“filtrar” las operaciones sobre índice)

Los predicados de filtro sobre índice solo se aplican durante el recorrido del nodo hoja. No contribuye a las condiciones de inicio y de 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 la tabla. Para que eso pase, 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 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.

Eso significa que INDEX RANGE SCAN escanea el rango entero para la condición "SECTION"=:A y aplica el filtro "ID2"=:B sobre cada fila.

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

Varias herramientas no muestran la información de predicado en su globalidad. Acuerde de que siempre se puede recurrir a DBMS_XPLAN como se explica en “Obtener un plan de ejecución”.

Sugerencia

Acerca del autor

Foto de Markus Winand

Markus Winand enseña eficientemente SQL, en casa y online. Minimiza el tiempo de desarrollo utilizando moderno SQL y optimiza el tiempo de ejecución con indexación inteligente. Para ello también ha publicado el libro SQL Performance Explained.

“Use The Index, Luke” de Markus Winand se halla bajo licencia Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacy | CC-BY-NC-ND 3.0 licencia