En las bases de datos relacionales , se dice que una condición (o predicado) en una consulta se puede descartar si el motor DBMS puede aprovechar un índice para acelerar la ejecución de la consulta. El término se deriva de una contracción de Search ARGument ABLE .
Una consulta que no se puede sargalar se conoce como consulta no sargable y, por lo general, tiene un efecto negativo en el tiempo de consulta, por lo que uno de los pasos en la optimización de consultas es convertirlas para que se puedan sargalar. El efecto es similar a buscar un término específico en un libro que no tiene índice, comenzando en la página uno cada vez, en lugar de saltar a una lista de páginas específicas identificadas en un índice.
La situación típica que hará que una consulta SQL no se pueda comparar es incluir en la cláusula WHERE una función que opere en un valor de columna. La cláusula WHERE no es la única cláusula en la que la sargabilidad puede importar; también puede afectar a las cláusulas ORDER BY, GROUP BY y HAVING. La cláusula SELECT, por otro lado, puede contener expresiones no sargables sin afectar negativamente al rendimiento.
- Operadores Sargable:
=, >, <, >=, <=, BETWEEN, LIKE, IS [NOT] NULL
- Operadores Sargable que rara vez mejoran el rendimiento:
<>, IN, OR, NOT IN, NOT LIKE
Ejemplo simple
WHERE
las cláusulas que son sargables suelen tener valores de campo a la izquierda del operador y valores escalares o expresiones a la derecha del operador.
No sargable:
SELECCIONAR * DESDE myTable DONDE 11.7 < SQRT ( myIntField )
Esto no se puede descartar porque myIntField está incrustado en una función. Si había índices disponibles en myIntField, no se podrían usar. Además, se llamaría en todos los registros de myTable.SQRT()
Versión Sargable:
SELECCIONAR * DESDE myTable DONDE myIntField > 11.7 * 11.7
Esto se puede descartar porque myIntField NO está contenido en una función, lo que hace que los índices disponibles en myIntField sean potencialmente utilizables. Además, la expresión se evalúa solo una vez, en lugar de para cada registro de la tabla.
Ver también
Referencias
- Ajuste del rendimiento de SQL por Peter Gulutzan, Trudy Pelzer (Addison Wesley, 2002) ISBN 0-201-79169-2 ( Capítulo 2, "Búsquedas" simples )
- Internos de Microsoft SQL Server 2012 por Kalen Delaney, Connor Cunningham, Jonathan Kehayias, Benjamin Nevarez, Paul S. Randal (O'Reily, 2013) ISBN 978-0-7356-5856-1 (Capítulo 11, El optimizador de consultas)