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:
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.
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) |
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 |
solicitud original | Resultado |
---|---|
(A se une a B) donde condA y condB | (A donde condA) unirse (B donde condB) |
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:
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 .
La distribución de predicados está hecha.
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.
AB antes de DE
se genera la condición inversa
DE invertida pre AB
para poder conectarse en orden inverso.
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.