Optimización semántica de consultas DBMS

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 30 de septiembre de 2021; las comprobaciones requieren 5 ediciones .

La optimización semántica de consultas de DBMS  es el proceso de validación y transformación del árbol de sintaxis de consultas en una forma adecuada para los pasos de optimización posteriores.

En esta etapa se realiza lo siguiente:

  1. Convertir consultas a formato canónico;
    1. Vistas reveladoras;
    2. Convierta subconsultas en uniones;
    3. Descenso de predicados
  2. Simplificación de condiciones y distribución de predicados;
  3. Conversión de un árbol de condiciones en una ruta de selección.

Conversión de consultas a formato canónico

Las consultas se canonicalizan, es decir, se reescriben para contener el número mínimo de sentencias SELECT (join-filter-projection). Siempre que sea posible, la consulta debe reducirse a la forma de una sola instrucción SELECT. Esto puede permitir que las fases de optimización posteriores generen un plan de ejecución mucho más eficiente (en 2 o 3 órdenes de magnitud) para consultas complejas.

Vistas en expansión

La expansión de vista se usa para que la consulta final contenga referencias solo a relaciones materializadas (tablas) y sea posible usar el procesamiento de canalización de datos.

solicitud original Resultado
seleccione a de V donde cond2

donde V como seleccione a, b de T donde cond1

seleccione a de T donde (cond1 y cond2)

Convertir subconsultas en uniones

La conversión de subconsultas en uniones es necesaria para aplicar el procesamiento de canalización de datos y minimizar la cantidad de resultados de subconsultas acumulados en el disco temporal o en la RAM.

solicitud original Resultado
seleccionar distinto Ta de T donde Tb in (seleccione T1.b de T1 donde T1.c < Tc) seleccionar distinto Ta de T,T1 donde Tb = T1.b y T1.c < Tc

Descenso predicado

solicitud original Resultado
(A se une a B) donde condA y condB (A donde condA) unirse (B donde condB)

Simplificación de condiciones y distribución de predicados

Simplificación de condiciones

Se realiza convirtiendo el árbol de operaciones lógicas en CNF y simplificando la función lógica resultante.

La transformación del árbol de operaciones lógicas a CNF se realiza de la siguiente manera:

  1. Para todas las disyunciones incluidas en forma directa, se aplica la ley distributiva:
P O (Q Y R) = (P O Q) Y (P O R) (P Y Q) O R = (P O R) Y (Q O R)
  1. Para todas las disyunciones que aparecen en forma inversa, se aplica la regla de Morgan :
NO (P O Q) = NO P Y NO Q

La transformación continúa recursivamente hasta que el árbol se compone de conjunciones del constituyente 0 .

La función booleana resultante está en forma normal conjuntiva , pero es redundante. Para simplificar, se utilizan métodos de optimización de funciones lógicas, como Espresso (Logic) o Quine-McCluskey .

Distribución de predicados

La distribución de predicados está hecha.

  1. para todos los predicados de la forma:

AB antes de C

para el cual hay un predicado

AB=DE

Como resultado, obtenemos el predicado

DB antes de C

donde C es una constante; A,D - relaciones; B,E - atributos comparados. Esta simplificación se basa en la suposición de que el predicado original AB pred C puede ser más eficiente para la relación D.

  1. para cada condición de unión de vistas:

AB antes de DE

se genera la condición inversa

DE invertida pre AB

para poder conectarse en orden inverso.

Conversión de un árbol de condiciones en una ruta de obtención

Después de simplificar el árbol de condiciones, cada conjunción en el árbol es una ruta de búsqueda. Los predicados dentro de las conjunciones se agrupan por relación. Para obtener el resultado final, es necesario combinar los resultados de cada una de las rutas de muestreo.

Véase también

Literatura