Ninguna otra base de datos provee mejor información a cerca del modo de evaluación de los predicados que Db2 porque dice dentro del plan de ejecución si se utiliza un predicado como condición de inicio y/o de fin para IXSCAN o simplemente un predicado de filtro. Sin embargo, es algo confusa porque usa una definición antigua del término “sarg”.
En los primeros tiempos, los investigadores de IBM denominaron a este tipo de condiciones de búsqueda “predicados sargable” porque SARG es la contracción de Search ARGument (en español, argumento de búsqueda). En días posteriores, Microsoft y Sybase volvieron a definir “sargable” con la “posibilidad de hacer la búsqueda a través del índice”.
Pero ambas definiciones son prácticamente inútiles y omito el término en mis libros y artículos. Sin embargo, los predicados de filtro dentro de los planes de ejecución Db2 se etiquetan SARG
; se tiene que exponer de forma explícita que Db2 usa la definición “original” como se ha indicado con anterioridad. Por supuesto, está respaldado por la documentación:
Los predicados de índice sargable no se emplean para una búsqueda sino que se evalúa desde el índice si se escoge uno, porque las columnas involucradas dentro del predicado son parte de la clave del índice.
Los datos sargable de los predicados requieren el acceso de las filas individuales desde la tabla original. Si es necesario, DMS devolverá las columnas necesarias para evaluar el predicado, como cualquier otro para satisfacer las columnas dentro de la lista del SELECT que no podrían obtenerse desde el índice.
— Predicados usados por las sentencias, documentación Db2 (LUW) 10.5
Eso significa que, por lo general, los predicados Db2 etiquetados SARG
son solamente predicados de filtro; tanto a nivel de índice como de tabla.
La parte muy interesante de la información de los predicados mostrados en los planes de ejecución Db2 es que no solamente etiquetan los predicados de acceso sino que muestran de manera explícita las condiciones de los predicados usadas con START
y/o STOP
.
El siguiente ejemplo muestra todos los tipos de predicados como se ha visto en la vista last_explained
:
Explain Plan
--------------------------------------------------------------
ID | Operation | Rows | Cost
1 | RETURN | | 23550
2 | GRPBY (COMPLETE) | 1 of 96480 ( .00%) | 23550
3 | IXSCAN SCALE_SLOW | 96480 of 60299800 ( .16%) | 23544
Predicate Information
3 - START (Q1.SECTION = ?)
STOP (Q1.SECTION = ?)
SARG (Q1.ID2 = ?)
Explain plan by Markus Winand - NO WARRANTY
http://use-the-index-luke.com/s/last_explained
El rango escaneado del índice puede determinarse con facilidad desde la salida y se determina sólo por los predicados START
y STOP
(en este caso, son los mismos). El tercer predicado sobre la columna ID2
se etiqueta SARG
y es sólo un predicado de filtro.
Mientras los predicados SARG
pueden aparecer en otras operaciones (por ejemplo TBSCAN
), START
y STOP
son exclusivos para IXSCAN
. La ausencia de START
o STOP
indica una búsqueda con sólo un límite inferior o superior (por ejemplo, WHERE x > ?
). Si ni START
ni STOP
aparecen para IXSCAN
, eso significa que se lee el índice entero.