Una sugerencia en el lenguaje SQL ( Insinuación en inglés ) es una herramienta que le permite influir explícitamente en el plan de consulta .
La consulta SQL en sí contiene una indicación de qué información debe obtenerse de la base de datos, pero no contiene instrucciones sobre cómo hacerlo. En el caso general, los DBMS relacionales determinan el plan de consulta de acuerdo con sus propias reglas y, en consecuencia, lo ejecutan. Sin embargo, en la práctica, puede darse el caso de que dicho plan de consulta, debido a factores no tomados en cuenta por el DBMS, imperfecciones lógicas o requisitos especiales, pueda resultar subóptimo. La sugerencia le permite intervenir explícitamente en la formación del plan de consulta, sin depender por completo de la automatización.
La sintaxis y el conjunto de sugerencias no se describen en el estándar SQL , depende en gran medida de la implementación específica del DBMS.
Se distinguen las siguientes asignaciones de pistas:
En algunos casos, el DBMS puede ignorar la sugerencia.
Microsoft SQL Server ha agregado algunas palabras clave para sugerir al optimizador, por ejemplo, en una consulta:
SELECCIONAR * DESDE Clientes C CON ( ÍNDICE = Ciudad ) INNER LOOP JOIN Órdenes O ON O . ID de cliente = C . Identificación del cliente DONDE C. _ Ciudad = 'Madrid'hay dos pistas:
En Oracle Database, las sugerencias se insertan en el texto de la consulta como un comentario. El texto del comentario se analiza y, si se encuentra que coincide con la sintaxis del idioma de solicitud, se acepta. Debido a esta sintaxis, una consulta con sugerencias se puede ejecutar en otro DBMS sin modificaciones, y un error tipográfico en la sugerencia hace que el servidor la trate como un simple comentario [1] . Por ejemplo, en una solicitud:
SELECCIONE /*+ completo(t) */ t . nombre DESDE tbl1 t DONDE t . fecha = SYSDATE SELECT /*+ index(t ind_date) */ t . nombre DESDE tbl1 t DONDE t . fecha = FECHA DEL SISTEMAusó las siguientes sugerencias:
En MySQL , a partir de la versión 3.23.12, puede especificar qué índices (claves) debe usar MySQL para recuperar información de una tabla [2] :
table_name [[ AS ] alias ] [[ USE INDEX ( key_list )] | [ IGNORAR ÍNDICE ( key_list )] | ÍNDICE DE FUERZA ( key_list )]]