El término "sargable" fue introducido por primera vez por P. Griffiths Selinger et al. en su artículo de 1979 "Selección de ruta de acceso en un sistema de gestión de bases de datos relacionales", publicado por ACM . Para los que no son miembros de ACM hay una copia de ese documento en http://cs.stanford.edu/people/chrismre/cs345/rl/selinger.pdf
El término se define en este párrafo:
Los escaneos de índice y segmento 1 pueden tomar opcionalmente un conjunto de predicados, llamados argumentos de búsqueda (o SARGS), que se aplican a una tupla antes de que se devuelva al llamador RSI 2 . Si la tupla satisface los predicados, se devuelve; de lo contrario, la exploración continúa hasta que encuentra una tupla que satisface los SARGS o agota el segmento o el rango de valores de índice especificado. Esto reduce el costo al eliminar la sobrecarga de hacer llamadas RSI para tuplas que pueden ser rechazadas eficientemente dentro del RSS. No todos los predicados son de la forma que puede convertirse en SARGS. Un predicado sargable es uno de forma (o que se puede poner en el formulario) "valor de operador de comparación de columna". Los SARGS se expresan como una expresión booleana de dichos predicados en forma disyuntiva normal.
En otras palabras, un predicado sargable es tal que puede ser resuelto por el motor de almacenamiento (método de acceso) observando directamente la tabla o el registro de índice. Un predicado no sargable, por el contrario, requiere un nivel superior del DBMS para tomar medidas. Por ejemplo, el WHERE lastname = 'Doe'
motor de almacenamiento puede decidir el resultado de simplemente mirando el contenido del campo lastname
de cada registro. Por otro lado, WHERE UPPER(lastname) = 'DOE'
requiere la ejecución de una función por el motor SQL, lo que significa que el motor de almacenamiento tendrá que devolver todas las filas que lee (siempre que coincidan con otros posibles predicados sargable) al motor SQL para su evaluación, incurriendo en costos adicionales de CPU .
Puede ver en la definición original que los predicados sargable pueden aplicarse no solo a los escaneos de índice, sino también a los escaneos de tabla (segmento en la terminología del Sistema R), siempre que se cumplan las condiciones "valor de operador de comparación de columna" y, por lo tanto, se puedan cumplir evaluado por el motor de almacenamiento. De hecho, este es el caso con Db2, un descendiente del Sistema R de muchas maneras :
Los predicados de índice sargable no se utilizan para delimitar una búsqueda, pero se evalúan a partir del índice si se elige uno, porque las columnas involucradas en el predicado son parte de la clave de índice. Estos predicados también son evaluados por el administrador de índices.
Los predicados de datos sargable son predicados que el administrador de índices no puede evaluar, pero los Servicios de administración de datos (DMS) pueden evaluar. Por lo general, estos predicados requieren el acceso de filas individuales desde una tabla base. Si es necesario, DMS recuperará las columnas necesarias para evaluar el predicado,
El hecho de que en SQL Server-speak los predicados sargable son solo aquellos que pueden resolverse mediante búsquedas de índice probablemente esté determinado por la incapacidad de su motor de almacenamiento para aplicar dichos predicados durante los escaneos de tablas.
Los predicados sargable y no sargable a veces se describen como predicados "etapa 1" y "etapa 2" respectivamente (esto también proviene de la terminología Db2 ). Los predicados de la etapa 1 se pueden evaluar en el nivel más bajo de procesamiento de consultas, mientras se leen registros de tablas o índices. Las filas que coinciden con las condiciones de la etapa 1, si las hay, se envían al siguiente nivel, etapa 2, de evaluación.
1 - El segmento en el Sistema R es el almacenamiento físico de las tuplas de una tabla; una exploración de segmento es algo equivalente a una exploración de tabla en otros DBMS.
2 - RSI - RSS 3 Interface, una interfaz de consulta orientada a tuplas. La función de interfaz relevante para esta discusión es NEXT, que devuelve los predicados de consulta de coincidencia de la siguiente fila.
3 - RSS, o Research Storage System, el subsistema de almacenamiento del Sistema R.