En las bases de datos relacionales , se dice que una condición (o predicado) en una consulta es indexable si el motor del sistema de gestión de bases de datos (DBMS) puede aprovechar un índice para acelerar la ejecución de la consulta. El término deriva de una contracción de Search ARgument (Argumento de búsqueda ABLE) . Fue utilizado por primera vez por investigadores de IBM como una contracción de Search ARgument, y ha llegado a significar simplemente "puede ser consultado por un índice". 1 [ 1 ] [ 2 ]
Para los optimizadores de consultas de bases de datos , la capacidad de ser sargable es una propiedad importante en las cargas de trabajo OLTP porque sugiere que se puede obtener un buen plan de consulta mediante una consulta heurística simple que coincida con los índices en lugar de una búsqueda compleja y que consume mucho tiempo basada en costos, [ 1 ] por lo que a menudo se desea escribir consultas sargables. Una consulta que no es sargable se conoce como consulta no sargable y generalmente tiene un efecto negativo en el tiempo de consulta, por lo que uno de los pasos en la optimización de consultas es convertirlas en sargables. 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 hace que una consulta SQL no sea apta para la segmentación es incluir en la cláusula WHERE una función que opere sobre el valor de una columna. La cláusula WHERE no es la única en la que la segmentación puede ser relevante; también puede afectar a las cláusulas ORDER BY, GROUP BY y HAVING. La lista SELECT, por otro lado, puede contener expresiones no segmentables sin afectar negativamente al rendimiento.
Algunos sistemas de gestión de bases de datos, como PostgreSQL, admiten índices funcionales . Conceptualmente, un índice es simplemente una correspondencia entre un valor y una o más ubicaciones. Con un índice funcional, el valor almacenado es el resultado de la función especificada al crearlo. Esta capacidad amplía las posibilidades de búsqueda más allá de las expresiones de columna básicas.
- Operadores sargables:
=,>,<,>=,<=,BETWEEN,LIKE,IS[NOT]NULL,IN - Operadores manipulables que rara vez mejoran el rendimiento:
<>,NOT,NOTIN,NOTLIKE
Ejemplo sencillo
WHERELas cláusulas que se pueden segmentar suelen tener los valores de las columnas a la izquierda del operador y los valores escalares o expresiones a la derecha del operador.
No se puede sargable:
SELECCIONAR * DE myTable DONDE SQRT ( myIntColumn ) > 11.7Esto no es indexable porque myIntColumn está incrustado en una función. Si hubiera índices disponibles en myIntColumn, no se podrían usar. Además, se llamaría a cada fila de myTable.SQRT()
Versión sargable:
SELECCIONAR * DE myTable DONDE myIntColumn > 11.7 * 11.7Esto es posible porque myIntColumn NO está dentro de una función, lo que permite utilizar cualquier índice disponible en myIntColumn. Además, la expresión se evalúa solo una vez, en lugar de para cada fila de la tabla.
Ejemplo de texto
WHERE... LIKElas cláusulas que son sargables tienen valores de columna a la izquierda del operador y LIKEcadenas de texto que no comienzan con el %a la derecha.
No se puede sargable:
SELECT * FROM myTable WHERE myNameColumn LIKE '%Wales%' -- Comienza con %, no se puede buscarEsto no es compatible con la búsqueda de subcadenas. Debe examinar cada fila para encontrar la columna que contiene la subcadena 'Wales'en cualquier posición.
Versión sargable:
SELECT * FROM myTable WHERE myNameColumn LIKE 'Jimmy%' -- No comienza con %, sargableEsto es sargable. Puede usar un índice para encontrar todos los valores de myNameColumn que comiencen con la subcadena 'Jimmy'.
Véase también
Notas
Enlaces externos
- SQL Shack: Cómo usar expresiones sargables en consultas T-SQL; ventajas de rendimiento y ejemplos.
- DBA.StackExchange.com - ¿Qué significa realmente la palabra "SARGable"?
Referencias
- 1 2 Andy, Pavlo (Primavera 2023). "CMU 15-721 :: Sistemas avanzados de bases de datos (Primavera 2023) :: Conferencia n.° 16 Implementación del optimizador (Parte 1) - Diapositiva" (PDF) . Archivado (PDF) del original el 1 de junio de 2023. Recuperado el 25 de enero de 2024 .
- ↑ Selinger, P. Griffiths; Astrahan, MM; Chamberlin, DD; Lorie, RA; Price, TG (1979). "Selección de ruta de acceso en un sistema de gestión de bases de datos relacionales" . Actas de la conferencia internacional ACM SIGMOD de 1979 sobre gestión de datos - SIGMOD '79 . ACM Press. pág. 23. doi : 10.1145/582095.582099 . ISBN 978-0-89791-001-9.
- ↑ Silberschatz, Abraham; Korth, Henry F.; Sudarshan, S. (2020). Conceptos de sistemas de bases de datos (7.ª ed.). Nueva York, NY: McGraw-Hill Education. pág. 773. ISBN 978-1-260-08450-4.
- Optimización del rendimiento de SQL por Peter Gulutzan y Trudy Pelzer (Addison Wesley, 2002) ISBN 0-201-79169-2( Capítulo 2, "Búsquedas" simples )
- Microsoft SQL Server 2012 Internals por Kalen Delaney, Connor Cunningham, Jonathan Kehayias, Benjamin Nevarez, Paul S. Randal (O'Reilly, 2013) ISBN 978-0-7356-5856-1(Capítulo 11, El optimizador de consultas)
- Sistemas de gestión de bases de datos
- Modelo relacional