Un plan de consulta (o plan de ejecución de consultas ) es una secuencia de pasos que se utilizan para acceder a los datos en un sistema de gestión de bases de datos relacionales SQL . Este es un caso específico del concepto de modelo relacional de planes de acceso.
Dado que SQL es declarativo , normalmente existen muchas formas alternativas de ejecutar una consulta determinada, con un rendimiento muy variable. Cuando se envía una consulta a la base de datos, el optimizador de consultas evalúa algunos de los diferentes planes posibles correctos para ejecutar la consulta y devuelve lo que considera la mejor opción. Debido a que los optimizadores de consultas son imperfectos, los usuarios y administradores de bases de datos a veces necesitan examinar y ajustar manualmente los planes producidos por el optimizador para obtener un mejor rendimiento.
Un sistema de gestión de base de datos determinado puede ofrecer uno o más mecanismos para devolver el plan para una consulta determinada. Algunos paquetes incluyen herramientas que generarán una representación gráfica de un plan de consulta. Otras herramientas permiten establecer un modo especial en la conexión para hacer que el DBMS devuelva una descripción textual del plan de consulta. Otro mecanismo para recuperar el plan de consulta implica consultar una tabla de base de datos virtual después de ejecutar la consulta a examinar. En Oracle, por ejemplo, esto se puede lograr utilizando la declaración EXPLAIN PLAN.
La herramienta Microsoft SQL Server Management Studio , que se incluye con Microsoft SQL Server , por ejemplo, muestra este plan gráfico al ejecutar este ejemplo de combinación de dos tablas en una base de datos de muestra incluida:
SELECCIONE * DE Recursos Humanos . Empleado AS e INNER JOIN Persona . Póngase en contacto con AS c ON e . ID de contacto = c . ContactID ORDEN POR c . Apellido
La interfaz de usuario permite explorar varios atributos de los operadores involucrados en el plan de consulta, incluido el tipo de operador, la cantidad de filas que cada operador consume o produce y el costo esperado del trabajo de cada operador.
El plan textual proporcionado para la misma consulta en la captura de pantalla se muestra aquí:
Texto stmt---- |-- Ordenar ( ORDENAR POR : ( [ c ] . [ Apellido ] ASC )) |-- Bucles anidados ( unión interna , REFERENCIAS EXTERNAS : ( [ e ] . [ ContactID ] , [ Expr1004 ] ) CON PREFETCH DESORDENADA ) |-- Escaneo de índice agrupado ( OBJETO : ( [ AdventureWorks ] . [ HumanResources ] . [ Empleado ] . [ PK_Employee_EmployeeID ] AS [ e ] )) |-- Búsqueda de índice agrupado ( OBJETO : ( [ AdventureWorks ] . [ Persona ] . [ Contacto ] . [ PK_Contact_ContactID ] AS [ c ] ), BUSCAR :( [ c ] . [ ContactID ] = [ AdventureWorks ] . [ HumanResources ] . [ Empleado ] . [ ContactID ] como [ e ] . [ ContactID ] ) ORDENADO ADELANTE )
Indica que el motor de consulta realizará un escaneo del índice de clave principal en la tabla Empleado y una búsqueda coincidente a través del índice de clave principal (la columna ContactID) en la tabla Contacto para encontrar filas coincidentes. Las filas resultantes de cada lado se mostrarán a un operador de unión de bucles anidados, se ordenarán y luego se devolverán como conjunto de resultados a la conexión.
Para ajustar la consulta, el usuario debe comprender los diferentes operadores que puede utilizar la base de datos y cuáles podrían ser más eficientes que otros y al mismo tiempo proporcionar resultados de consulta semánticamente correctos.
Revisar el plan de consulta puede presentar oportunidades para nuevos índices o cambios en los índices existentes. También puede mostrar que la base de datos no aprovecha adecuadamente los índices existentes (consulte el optimizador de consultas ).
Un optimizador de consultas no siempre elegirá el plan de consulta más eficiente para una consulta determinada. En algunas bases de datos se puede revisar el plan de consulta, encontrar problemas y luego el optimizador de consultas ofrece sugerencias sobre cómo mejorarlo. En otras bases de datos se pueden probar alternativas para expresar la misma consulta (otras consultas que devuelvan los mismos resultados). Algunas herramientas de consulta pueden generar sugerencias integradas en la consulta, para que las utilice el optimizador.
Algunas bases de datos, como Oracle, proporcionan una tabla de planes para ajustar las consultas. Esta tabla de plan devolverá el costo y el tiempo para ejecutar una consulta. Oracle ofrece dos enfoques de optimización:
RBO está quedando obsoleto lentamente. Para utilizar CBO, se deben analizar todas las tablas a las que hace referencia la consulta. Para analizar una tabla, un DBA puede ejecutar código desde el paquete DBMS_STATS.
Otras herramientas para la optimización de consultas incluyen: