Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Datos
Tema 9
Optimización de consultas en
Bases de Datos
1
Optimización de consultas en bases de datos
Objetivos:
Estudiar los algoritmos de ejecución de las operaciones
básicas de consulta en BD relacionales.
Estudiar la optimización de consultas basada en el uso de
reglas heurísticas.
Estudiar la optimización de consultas basada en la estimación
de costes.
2
Optimización de consultas en bases de datos
1 Introducción.
2 Traducción de SQL a Álgebra Relacional.
3 Algoritmos de ejecución de las operaciones básicas de consulta.
4 Optimización basada en reglas heurísticas.
5 Optimización basada en estimación de costes.
3
1 Introducción.
Consulta en BD relacionales:
Expresiones complejas en SQL (SELECT).
El SQL es un lenguaje muy declarativo.
Es posible reescribir una consulta SQL en otra equivalente que sea más
económica (menor tiempo de ejecución).
Es posible usar distintas estrategia de ejecución de la consulta.
Optimización:
Transformación de las consultas SQL en formas equivalentes más
económicas.
La optimización no significa encontrar la forma equivalente “óptima”.
4
1 Introducción.
Clasificación de las estrategias de optimización:
5
1 Introducción.
Módulo optimizador del SGBD:
6
1 Introducción.
Etapas en la ejecución de una consulta SQL (SELECT):
1. Análisis léxico‐sintáctico de la instrucción SELECT.
2. Planificación de la secuencia de operaciones (optimizada)
que resuelve la instrucción.
3. Generación del código de ejecución de la instrucción.
7
1 Introducción.
Etapas en la ejecución de una consulta SQL (SELECT):
Instrucción SELECT
Análisis léxico‐sintáctico
1
y validación
Representación de la
instrucción (A.R.) Diccionario
del sistema
2 Optimización
Plan de ejecución
Generación de
3
código de ejecución
Código de ejecución
‐ interpretado
‐ compilado
4 Ejecución
Resultado
8
1 Introducción.
Ejemplo: Instrucción SQL
A continuación, se van a ilustrar las etapas en la ejecución de una SELECT, con un ejemplo.
En el ejemplo, se usa una base de datos sobre la docencia de profesores en asignaturas. La tabla
Docencia contiene información sobre qué profesor imparte cada asignatura indicando los grupos
de teoría y prácticas que imparte.
9
1 Introducción.
Ejemplo: Instrucción SQL
1. Análisis léxico‐sintáctico y validación
SELECT DISTINCT A.cod_asg, A.nombre
FROM Asignatura A, Docencia D
WHERE A.cod_asg=D.cod_asg AND
A.teoría>3 AND D.gteo>2;
Representación de la
consulta: expresión de
Álgebra Relacional
10
10
1 Introducción.
Ejemplo: Instrucción SQL
2. Optimización de la consulta (optimización 1)
Optimización
(sintáctica)
[A.cod_asg,A.nombre]
[A.cod_asg,A.nombre]
DONDE A.cod_asg=D.cod_asg
A.teoría > 3 D.gteo>2 DONDE A.teoría > 3 D.gteo>2
× A.cod_asg=D.cod_asg
A D A D
A: Asignatura
D: Docencia 11
11
1 Introducción.
Ejemplo: Instrucción SQL
2. Optimización de la consulta (optimización 2)
Optimización
(sintáctica)
[A.cod_asg,A.nombre] [A.cod_asg,A.nombre]
A.cod_asg=D.cod_asg
DONDE A.cod_asg=D.cod_asg
A.teoría > 3 D.gteo>2
DONDE A.teoría > 3 DONDE D.gteo > 2
A D A D
A: Asignatura
D: Docencia 12
12
1 Introducción.
Ejemplo: Instrucción SQL
2. Optimización de la consulta: plan de ejecución (plan 2)
[A.cod_asg,A.nombre]
Eliminación campos (en flujo)
A.cod_asg=D.cod_asg
A: Asignatura
D: Docencia 13
13
1 Introducción.
Ejemplo: Instrucción SQL
3. Generación del código (plan 2)
A: Asignatura
D: Docencia
Código interpretado
o
Código compilado
14
Una vez se ha obtenido un plan de ejecución para la consulta, se genera, a partir de él, código
ejecutable.
14
Optimización de consultas en bases de datos
1 Introducción.
2 Traducción de SQL a Álgebra Relacional.
3 Algoritmos de ejecución de las operaciones básicas de consulta.
4 Optimización basada en reglas heurísticas.
5 Optimización basada en estimación de costes.
15
15
2 Traducción de SQL a Álgebra Relacional.
SELECT …
FROM …
WHERE …
[GROUP BY…
[HAVING …]]
Fases:
1. Descomposición de la consulta en bloques de consulta.
2. Traducción de cada bloque a una expresión de Álgebra
Relacional.
3. Composición de las expresiones obtenidas.
16
Para traducir la SELECT original del usuario a una expresión de Álgebra Relacional, se siguen los
siguientes pasos:
• Descomponer la SELECT original en bloques de consulta (subconsultas SELECT).
• Traducir cada bloque de consulta a una expresión de Álgebra Relacional.
• Combinar las distintas expresiones obtenidas en una única expresión.
16
2 Traducción de SQL a Álgebra Relacional.
1. Descomposición en bloques de consulta:
“Obtener el nombre de las asignaturas que
superan en créditos de teoría a todas las
SELECT nombre asignaturas del departamento de código DSIC.”
FROM Asignatura
WHERE teoría > (SELECT MAX(teoría)
FROM Asignatura
WHERE cod_dep=‘DSIC’)
17
17
2 Traducción de SQL a Álgebra Relacional.
2. 3. Traducción y composición:
SELECT MAX(teoría)
C = FROM Asignatura MAX (teoría ) cod _ dep 'DSIC ' Asignatura
WHERE cod_dep=‘DSIC’
SELECT nombre
FROM Asignatura nombre teoríaC Asignatura
WHERE teoría > C
18
En el ejemplo, se usa una notación simplificada para los operadores de Álgebra Relacional. Esta
notación será presentada en el punto siguiente del tema.
18
Optimización de consultas en bases de datos
1 Introducción.
2 Traducción de SQL a Álgebra Relacional.
3 Algoritmos de ejecución de las operaciones básicas de consulta.
4 Optimización basada en reglas heurísticas.
5 Optimización basada en estimación de costes.
19
19
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Operadores del Álgebra Relacional:
Ordenación externa
Selección (c)
Proyección (L) (eliminando duplicados)
Concatenación interna ( A=B) (INNER JOIN)
Producto cartesiano (×)
Operaciones conjuntistas ( )
Operaciones de agregación ( )
Concatenación externa (OUTER JOIN)
20
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Ordenación externa (en MS):
21
Los algoritmos de ordenación externa (en memoria secundaria) son útiles para ejecutar muchas
operaciones de Álgebra Relacional, por ejemplo, las operaciones conjuntistas, la proyección, o la
concatenación.
21
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Ordenación externa: Algoritmo ordenar‐fusionar (sort‐merge)
Ordenación de un fichero de tamaño nF bloques.
Espacio en MP disponible para la ordenación: nB bloques.
Fases:
1. División: se divide el fichero en subficheros temporales (runs) cada uno
con nB bloques:
Número de runs iniciales nR = nF / nB
2. Ordenación: se ordena cada run internamente en MP y se graba en el
disco como un run ordenado
3. Fusión: los runs ordenados se fusionan en MP en una o más iteraciones.
Grado de fusión dM: número de runs que se pueden fusionar en una
iteración:
dM = menor (nB1, nR)
(se van leyendo dM runs bloque a bloque en dM bloques de MP y se reserva un
bloque para ir escribiendo el resultado de la fusión)
Número de iteraciones = logdM nR 22
22
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Ordenación externa: Algoritmo ordenar‐fusionar (sort‐merge)
2 nF (1 + logdM nR )
23
23
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Selección: condición simple (atributo op valor)
Condiciones simples*:
1. De igualdad: atr = valor
2. De desigualdad: atr valor
3. De rango: atr op_com valor donde op_com {<, >, ≤, ≥}
Métodos de búsqueda: dependen de la organización de fichero y de
los índices definidos sobre el fichero.
S1. Búsqueda lineal (cualquier organización de fichero).
• Condiciones 1, 2 y 3
S2. Búsqueda binaria (fichero ordenado).
• Condiciones 1 y 3
S3. Búsqueda con direccionamiento calculado (fichero disperso).
• Condición 1
S4. Búsqueda con índice (cualquier organización de fichero).
• Condiciones 1 y 3
24
La operación de selección sobre una tabla se traduce en una operación de búsqueda de todos
los registros que cumplen una condición, en el fichero que implementa la tabla.
Sea la base de datos Docencia:
Búsqueda lineal: se puede aplicar a cualquier organización de fichero.
SELECT * FROM Profesor;
(Independientemente de la implementación de la tabla Profesor).
Búsqueda binaria: se puede aplicar si el fichero es un fichero ordenado por el atributo (campo)
de búsqueda.
SELECT nombre FROM Departamento WHERE cod_dep=‘DSIC’;
(Si Departamento está implementada como un fichero ordenado por el atributo cod_dep). No es útil para
la desigualdad
Búsqueda con direccionamiento calculado: se puede aplicar si el fichero es un fichero disperso
sobre el atributo (campo) de búsqueda.
SELECT nombre FROM Profesor WHERE cod_prof=‘JCC’;
(Si Profesor está implementada como un fichero disperso sobre el atributo cod_prof). Sólo es útil para
condición de igualdad.
Búsqueda con índice: se puede aplicar sobre cualquier organización de fichero si tiene definido
un índice sobre el atributo (campo) de búsqueda.
SELECT nombre FROM Profesor WHERE teléfono =0000;
(Si Profesor tiene definido un índice sobre el atributo teléfono). No es útil para la desigualdad.
24
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Selección: condición compleja conjuntiva (opi no es la desigualdad)
(atr1 op1 valor1) (atr2 op2 valor2) … (atrn opn valorn)
Métodos de búsqueda:
S5. Uso de un índice simple:
• Si existe un índice definido sobre un atributo que participa en la condición
conjuntiva, se usa el índice para seleccionar un conjunto de registros.
• Sobre los registros seleccionados se comprueba el resto de condiciones.
S6 Uso de un índice compuesto:
• Si existe un índice definido sobre dos o más atributos que participan, en
condiciones de igualdad, en la condición conjuntiva, se usa el índice para
seleccionar un conjunto de registros.
• Sobre los registros seleccionados se comprueba el resto de condiciones.
S7. Uso de varios índices:
• Si existen varios índices definidos sobre atributos que participan en la condición
conjuntiva, con punteros a registros, se usan los índices para recuperar varios
conjuntos de punteros a registros, y se obtiene su intersección.
• Sobre los registros seleccionados se comprueba el resto de condiciones.
25
25
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Selección: condición compleja disyuntiva (opi no es la desigualdad)
(atr1 op1 valor1) (atr2 op2 valor2) … (atrn opn valorn)
Métodos de búsqueda:
S8. Si algún atributo que participa en la condición no tiene índice, se debe
hacer una búsqueda lineal en el fichero. (Coincide con S1)
S9. Si todos los atributos que participa en la condición tienen índices
definidos, se usan los índices para recuperar conjuntos de punteros a
registros, y se obtiene su unión.
26
En la selección con condición compleja disyuntiva, la optimización es más difícil, ya que se debe
realizar la unión de los conjuntos de registros que cumplen cada una de las condiciones simples.
Sólo en el caso de que haya un índice definido para cada uno de los atributos de las condiciones
simples, se puede optimizar.
Ejemplo:
SELECT nombre FROM Profesor WHERE teléfono=0000 OR cod_dep=‘DSIC’
Si Profesor sólo tiene un índice definido sobre el atributo teléfono, se usa el método S8 (coincide
con el S1).
Si Profesor tiene dos índices, uno definido sobre teléfono y el otro sobre cod_dep, se usa el
método S9.
26
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Selección: selectividad de una condición de selección (sl)
Cociente entre el número de filas que satisfacen la condición y
el número de filas de la tabla.
Puede estar o no disponible en el sistema.
El sistema guarda estimaciones:
Selectividad de una condición de igualdad sobre un atributo clave de
la tabla R:
sl = 1/card(R)
Selectividad de una condición de igualdad sobre un atributo no clave
con d valores distintos (distribución uniforme):
sl = (card(R)/d)/card(R) = 1/d
Cardinalidad de una condición (s): Número de filas que
satisfacen una condición con selectividad sl:
s = card(R) * sl
27
27
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Concatenación natural: R R.A=S.BS
Métodos de concatenación:
C1. Concatenación por bucle anidado:
• Para cada registro r de R (bucle externo) recorrer todos los registros
s de S (bucle interno) y comprobar si r.A=s.B.
C2. Concatenación por bucle único:
• Si existe un índice definido sobre uno de los atributos de la
concatenación (ej. B), para cada registro r de R (bucle único), usar el
índice sobre B para obtener todos los registros s de S coincidentes
r.A=s.B.
• Si una de las dos tablas está dispersa sobre uno de los atributos de
la concatenación (ej. S sobre B), para cada registro r de R (bucle
único), usar el la función de dispersión con valor r.A para obtener
todos los registros s de S coincidentes r.A=s.B.
28
28
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Concatenación natural: R R.A=S.BS
Métodos de concatenación:
C3. Concatenación por ordenación:
• Si R y S son ficheros ordenados según A y B: recorrer R y S en
paralelo, en un único bucle, buscando pares de registros
coincidentes (r.A=s.B).
• Si R y S no están ordenados: ordenar R y S y luego recorrerlos de
la forma anterior.
C4. Concatenación por direccionamiento calculado:
• Proceso:
1. Crear una copia, implementada con direccionamiento
calculado, de la tabla más pequeña (p.e. S), con una función
de dispersión f sobre B.
2. Recorrer R en un bucle, y para cada registro r de R aplicar f
sobre A para acceder a un cubo (o bloque) de la copia de S
donde buscar los registros coincidentes (r.A=s.B).
29
29
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Concatenación natural: R R.A=S.BS
R.A=S.B
S
Bucle externo
Bucle interno
Concatenación por
bucle anidado
R
A Índice
S
S_index (B)
Bucle único
Concatenación por
bucle único
30
30
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Concatenación natural: R R.A=S.BS
Copia‐R Copia‐S
(ORDER A) (ORDER B)
(recorrido en paralelo)
Bucle único
Concatenación por
ordenación
f(A)
Copia‐S
Bucle único
(Hash, f(B))
Concatenación por
direccionamiento calculado
31
Ejemplo:
SELECT P.nombre, D.nombre
FROM Profesor P INNER JOIN Departamento D ON P.cod_dep=D.cod_dep;
Si las dos tablas están implementadas como ficheros desordenados, y ninguna de las dos tablas
tiene definidos índices, entonces no se puede obtener ninguna ventaja de la implementación de
las tablas, la concatenación se puede ejecutar con los métodos C1, C3, o C4. La elección del
método dependerá de otros criterios.
Si las dos tablas están implementadas como ficheros desordenados, y la tabla Departamento
tiene definido un índice sobre el atributo cod_dep, entonces la concatenación se puede ejecutar
también con el método C2.
31
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Proyección: <lista de atributos>R
Casos:
<lista de atributos> incluye una clave de R: no aparecen filas duplicadas
en el resultado:
número de registros de la proyección = número de registros de R
<lista de atributos> no incluye una clave de R: pueden aparecer filas
duplicadas en el resultado.
• Eliminación de duplicados:
a) Ordenación del resultado de la operación y eliminación de los
duplicados.
b) Direccionamiento calculado
Crear un fichero, con direccionamiento calculado sobre todos
los atributos de la lista de proyección, para almacenar el
resultado de la proyección.
Antes de insertar un nuevo registro en el fichero se compara
con los que ya existen en el cubo direccionado, para evitar los
32
duplicados.
32
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Operaciones conjuntistas:
Métodos:
Ordenación:
• Ordenación de las dos tablas.
• Recorrido en paralelo de las tablas ordenadas para ejecutar la
operación.
Direccionamiento calculado:
• Crear una copia, implementada con direccionamiento calculado, de la
tabla de menor tamaño (p.e. S), con función de direccionamiento f
sobre todos sus atributos.
• Recorrer R, aplicar a cada registro la función f para buscar registros
idénticos en S, y ejecutar la operación.
Nota: En estas operaciones conjuntistas, las tablas deben tener el mismo esquema.
33
Los métodos para la ejecución de las operaciones conjuntistas (unión, intersección y diferencia)
se basan en la técnica de ordenación de las tablas o en la técnica de uso de copias de las tablas
(creadas con direccionamiento calculado), técnicas que ya se han visto en operadores anteriores
(concatenación y proyección).
33
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Operaciones conjuntistas: R × S
Operación muy costosa: doble bucle.
Generar todos los registros combinados posibles:
registro(R×S) = registro(R) + registro(S)
card(R×S) = card(R) × card(S)
Evitar esta operación mediante la sustitución por otras operaciones
equivalentes.
34
La operación producto cartesiano es la operación más costosa del Álgebra Relacional, ya que
obliga a recorrer ambas tablas en un doble bucle.
34
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Funciones agregadas: MIN, MAX, AVG, SUM, COUNT
Consulta de tabla completa:
Recorrido lineal:
• Se recorre la tabla y se calcula la función agregada sobre el atributo
Uso de un índice definido sobre el atributo de agregación:
• MAX o MIN: búsqueda de la entrada mayor o menor en el índice
(en un índice B+, se busca la hoja más a la derecha o más a la izquierda
en el árbol).
• COUNT, AVERAGE y SUM: si el índice es denso se puede calcular con
un recorrido completo del índice
(en un índice B+, recorrido de todas las hojas)
• COUNT, AVERAGE, SUM con DISTINCT: si el índice es disperso con
una entrada por valor se puede calcular con un recorrido completo
del índice.
(en un índice B+, recorrido de todas las hojas)
35
Las funciones agregadas (MAX, MIN, SUM, AVG, …) se pueden aplicar al conjunto de filas
resultante de la SELECT o a los conjuntos de filas definidos por la cláusula GROUP BY.
35
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Funciones agregadas: MIN, MAX, AVG, SUM, COUNT
Consulta agrupada:
La tabla se ordena por los atributos de agrupación.
La tabla se divide en subconjuntos de filas que tienen el mismo valor en los
atributos de agrupación.
Se calcula la función agregada en cada subconjunto.
36
36
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Concatenación externa: OUTER JOIN
Tipos: LEFT, RIGHT y FULL
Similar al INNER JOIN (concatenación natural), pero las filas que no
combinan aparecen en el resultado final combinándose con una fila
virtual de valores nulos.
Se pueden usar los métodos para la concatenación interna con alguna
variación.
La concatenación externa, en cualquiera de sus formas, se puede ejecutar con los mismos
métodos usados en la concatenación interna, con algunas modificaciones.
37
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Concatenación externa: OUTER JOIN
“Obtener el nombre de los profesores que hay junto con el código de las asignaturas que
imparten. Si algún profesor no tiene docencia debe aparecer sin código de asignatura.”
El operador concatenación externa también se puede ejecutar como una combinación de otros
operadores del Álgebra Relacional, como se ve en la transparencia.
38
Optimización de consultas en bases de datos
1 Introducción.
2 Traducción de SQL a Álgebra Relacional.
3 Algoritmos de ejecución de las operaciones básicas de consulta.
4 Optimización basada en reglas heurísticas.
5 Optimización basada en estimación de costes.
39
39
4 Optimización basada en reglas heurísticas.
40
40
4 Optimización basada en reglas heurísticas.
Árbol de consulta:
Estructura de datos (árbol) que representa una expresión de
Álgebra Relacional.
Las tablas de la consulta se representan como nodos hoja del
árbol.
Los operadores de Álgebra Relacional se representan como
nodos internos del árbol.
Ejecución de un árbol de consulta:
Empezar con los nodos hoja.
Ejecutar un nodo interno (operador) cuando sus operandos (nodoshijo)
están disponibles (tablas).
Reemplazar el nodo interno por el resultado de la operación.
La ejecución termina al llegar al nodo raíz y realizar el último
reemplazamiento.
41
41
4 Optimización basada en reglas heurísticas.
Árbol de consulta:
A.cod _ asg , A.nombre ( P.cod _ pro D.cod _ pro A.cod _ asg D.cod _ asg P.cod _ dep 'DSIC ' (( P D) A))
A: Asignatura
D: Docencia
P: Profesor
42
42
4 Optimización basada en reglas heurísticas.
Árbol de consulta:
A.cod _ asg , A.nombre ( P.cod _ pro D.cod _ pro A.cod _ asg D.cod _ asg P.cod _ dep 'DSIC ' (( P D) A))
A
P D
A: Asignatura
D: Docencia
P: Profesor
43
43
4 Optimización basada en reglas heurísticas.
Optimización heurística de árbol de consulta:
1. El analizador léxicosintáctico genera el árbol de consulta
inicial: traducción directa (en Álgebra Relacional) de la
instrucción SQL (SELECT), sin ninguna optimización.
2. El optimizador aplica reglas sintácticas y transforma el árbol de
consulta inicial en un árbol de consulta final.
44
44
4 Optimización basada en reglas heurísticas.
Optimización heurística de árbol de consulta:
1. El analizador léxico‐sintáctico genera el árbol de consulta
inicial sin optimización.
SELECT DISTINCT A.cod_asg, A.nombre
FROM Profesor P, Docencia D, Asignatura A
WHERE P.cod_pro=D.cod_pro AND A.cod_asg=D.cod_asg AND P.cod_dep=‘DSIC’
A A: Asignatura
D: Docencia
P D P: Profesor
45
45
4 Optimización basada en reglas heurísticas.
Optimización heurística de árbol de consulta:
2. El optimizador aplica reglas sintácticas y transforma el árbol de
consulta inicial en un árbol de consulta final (optimizado).
A.cod_asg, A.nombre
Optimización
A.cod_asg=D.cod_asg
P.cod_pro=D.cod_pro A
P.cod_dep=‘DSIC’ D
A: Asignatura
P D: Docencia
P: Profesor
46
46
4 Optimización basada en reglas heurísticas.
Reglas de transformación sintácticas para AR:
1. Cascada de : una selección con condición compleja conjuntiva
se puede descomponer en una secuencia (cascada) de
selecciones con condiciones simples:
c1c 2...cN ( R) c1 ( c 2 (...( cN ( R))))
2. Conmutatividad de con :
c1 ( c 2 ( R )) c 2 ( c1 ( R ))
3. Cascada de : en una secuencia (cascada) de proyecciones
todas las proyecciones menos la última se pueden ignorar:
lista1 ( lista 2 (...( listaN ( R))...)) lista1 ( R)
47
47
4 Optimización basada en reglas heurísticas.
Reglas de transformación sintácticas para AR:
4. Conmutatividad de con : si la condición c sólo afecta a
atributos de la lista de proyección, las dos operaciones pueden
conmutarse:
a1,a 2,...,aN ( c ( R)) c ( a1,a 2,...,aN ( R))
5. Conmutatividad de los operadores y ×:
R c S S c R
R S S R
48
48
4 Optimización basada en reglas heurísticas.
Reglas de transformación sintácticas para AR:
6. Conmutatividad de con y ×:
Si todos los atributos en la condición de la selección son de una de las
tablas operando (ej.: R) las dos operaciones se pueden conmutar:
c ( R S )( c ( R)) S
c ( R S )( c ( R)) S
Si la condición de la selección es c = c1 ∧ c2, donde en c1 sólo aparecen
atributos de R y en c2 sólo aparecen atributos de S:
c ( R S )( c1 ( R)) ( c 2 ( S ))
c ( R S )( c1 ( R)) ( c 2 ( S ))
49
49
4 Optimización basada en reglas heurísticas.
Reglas de transformación sintácticas para AR:
7. Conmutatividad de con y ×:
Lista de proyección L={a1, a2, …, aN, b1, b2, …, bM}
R S
Si los atributos de la condición de concatenación c están en L:
L ( R c S )( a1,...,aN ( R)) c ( b1,...,bM ( S ))
L ( R S )( a1,...,aN ( R)) ( b1,...,bM ( S ))
8. Conmutatividad de y de :
R S S R
R S S R
50
50
4 Optimización basada en reglas heurísticas.
Reglas de transformación sintácticas para AR:
9. Asociatividad de , ×, y de :
R ( S T )( R S ) T
R ( S T )( R S ) T
R ( S T )( R S ) T
51
51
4 Optimización basada en reglas heurísticas.
Reglas de transformación sintácticas para AR:
11. Conmutatividad de con :
L ( R S )( L ( R)) ( L ( S ))
12. Convertir la secuencia de operaciones×seguida de en :
Si la condición c de es una condición de concatenación
c ( R S )R c S
52
52
4 Optimización basada en reglas heurísticas.
Guía de un algoritmo de optimización heurístico:
1. Usando la regla 1: descomponer las selecciones con
condiciones conjuntivas en una secuencia de selecciones
simples.
2. Usando las reglas 2, 4, 6 y 10: mover las selecciones hacia abajo
en las ramas del árbol.
3. Usando las reglas 5 y 9: recolocar los nodos hojas siguiendo el
siguiente criterio:
Primero, mover hacia la izquierda en los nodos hoja, las tablas con valor
más pequeño de selectividad de la condición de selección.
Segundo, asegurarse de que el orden de las hojas no causa un producto
cartesiano.
4. Usando la regla 12: combinar un producto cartesiano con una
selección para obtener una concatenación.
53
53
4 Optimización basada en reglas heurísticas.
Guía de un algoritmo de optimización heurístico:
5. Usando reglas 3, 4, 7 y 11: romper y distribuir proyecciones y
moverlas hacia abajo en las ramas del árbol (sólo los atributos
necesarios para el resultado final y para operaciones
posteriores deben aparecer).
6. Identificar subárboles que representen grupos de operaciones
que pueden ser ejecutadas en un único algoritmo.
54
54
4 Optimización basada en reglas heurísticas.
Convertir árboles de consulta en planes de ejecución:
Plan de ejecución:
Árbol de consulta (optimizado) que representa una expresión
de Álgebra Relacional.
Métodos para computar los operadores en el árbol:
• Evaluación materializada: el resultado (filas) de la ejecución de la
operación se materializa, se almacenan temporalmente, para usarse
en la ejecución de la siguiente operación en el árbol de consulta.
• Evaluación en flujo: el resultado (filas) de la ejecución de la operación
son utilizadas directamente en la ejecución de la siguiente operación
en el árbol de consulta.
55
Una vez se ha obtenido el árbol de consulta optimizado, hay que generar un plan de ejecución
para la consulta, en el que se incluya el método de ejecución de cada operador del árbol. En esta
elección, sí que influyen las características físicas de las tablas (implementación).
La ejecución de los operadores puede hacerse de dos formas: materializada o en flujo.
• En la ejecución materializada, el resultado de la ejecución del operador se materializa, es
decir, se almacena temporalmente, y este resultado se usa para la ejecución del siguiente
operador en el árbol.
• En la ejecución en flujo, a medida que se obtienen las filas resultantes de ejecutar el
operador, se van utilizando para la ejecución del siguiente operador en el árbol.
55
4 Optimización basada en reglas heurísticas.
Convertir árboles de consulta en planes de ejecución:
“Nombre y semestre de las asignaturas del departamento de nombre ‘Sistemas’”
SELECT A.nombre, A.semestre
FROM Departamento De INNER JOIN Asignatura A ON De.cod_dep = A.cod_dep
WHERE De.nombre =‘Sistemas’;
A.nombre , A.semestre ( De.nombre 'Sistemas ' ( De De.cod _ dep A.cod _ dep A))
De.cod _ dep A.cod _ dep De.cod _ dep A.cod _ dep Bucle anidado (C1)
(materialización)
Búsqueda en
nombre 'Sistemas ' A índice (S4) nombre 'Sistemas ' A
(flujo)
De De
Árbol de consulta optimizado Plan de ejecución
56
A: Asignatura De: Departamento P: Profesor
56
4 Optimización basada en reglas heurísticas.
“Código y nombre de las asignaturas que imparten los profesores del departamento DSIC”
P.cod _ pro D.cod _ pro A.cod _ asg D.cod _ asg P.cod _ dep 'DSIC '
A A: Asignatura
D: Docencia
P D P: Profesor
57
Sea de nuevo la consulta; “Código y nombre de las asignaturas que imparten los profesores del
departamento DSIC”
En las transparencias siguientes, se muestra la aplicación, al árbol de consulta de las reglas de
transformación sintáctica que se han presentado. En cada transformación se indica el número de
la regla utilizada.
57
4 Optimización basada en reglas heurísticas.
A.cod _ asg , A.nombre
P.cod _ pro D.cod _ pro A.cod _ asg D.cod _ asg P.cod _ dep 'DSIC '
A.cod _ asg , A.nombre
P.cod _ pro D.cod _ pro
A
A
P D
58
58
4 Optimización basada en reglas heurísticas.
A
A
P
59
59
4 Optimización basada en reglas heurísticas.
A A
P P
60
60
4 Optimización basada en reglas heurísticas.
A
P.cod _ dep 'DSIC ' D P.cod _ dep 'DSIC ' D
P
P
61
61
4 Optimización basada en reglas heurísticas.
A.cod _ asg , A.nombre
P
P
62
62
4 Optimización basada en reglas heurísticas.
63
Como se puede observar, en el proceso de optimización, se han aplicado las reglas en un orden
determinado, según los criterios especificados en el algoritmo de optimización que se ha
presentado anteriormente.
63
Optimización de consultas en bases de datos
1 Introducción.
2 Traducción de SQL a Álgebra Relacional.
3 Algoritmos de ejecución de las operaciones básicas de consulta.
4 Optimización basada en reglas heurísticas.
5 Optimización basada en estimación de costes.
64
64
5 Optimización basada en estimación de costes.
65
Para analizar esta aproximación, es necesario determinar cuáles son los factores que intervienen
en el tiempo de ejecución (coste) de una consulta.
A continuación, se mostrará, como ejemplo, el cálculo del coste de ejecución de dos operadores
del Álgebra Relacional básicos: el operador selección y el operador concatenación.
Los optimizadores que siguen esta aproximación pueden aplicar, previamente a la generación de
un plan de ejecución y la estimación de su coste, alguna optimización sintáctica (optimizadores
híbridos).
65
5 Optimización basada en estimación de costes.
Componentes del coste en la ejecución de consultas:
66
De todos los componentes del coste, el más significativo es el coste en accesos a bloques de
disco (lectura y escritura).
Los otros factores pueden ser relevantes en algunos tipos particulares de bases de datos.
66
5 Optimización basada en estimación de costes.
Componentes del coste en la ejecución de consultas:
67
67
5 Optimización basada en estimación de costes.
Componentes del coste en la ejecución de consultas:
68
68
5 Optimización basada en estimación de costes.
Información del catálogo (diccionario) usada en la
estimación del coste:
69
69
5 Optimización basada en estimación de costes.
Información del catálogo (diccionario) usada en la
estimación del coste:
Atributos (campos):
Número de valores distintos (d).
Selectividad de una condición (sl).
Cardinalidad de una condición (s): s = sl * r
Condición igualdad sobre atributo clave: d=r, sl=1/r y s=1
Condición igualdad sobre atributo no clave (con distribución
uniforme): sl=1/d y s=r/d
La información puede no estar actualizada al instante, el
sistema la recoge periódicamente.
70
70
5 Optimización basada en estimación de costes.
Estudio de coste para la selección ():
S1. Búsqueda lineal (condición de igualdad):
Sobre atributo no clave: CS1 = b
Sobre atributo clave: CS1 = b/2 (si se encuentra), b (si no se encuentra)
Notas:
* el uso de un método u otro para la ejecución de los operadores depende de la implementación de la tabla y de los
índices disponibles.
** el coste se estima por el número de bloques transferidos de disco a memoria principal (se ignora el coste 71
computacional, el coste de almacenamiento intermedio, y otros factores).
71
5 Optimización basada en estimación de costes.
Estudio de coste para la selección ():
S2. Búsqueda binaria (condición de igualdad):
CS 2 log 2 b ( s / fb) 1
S3. Búsqueda con direccionamiento calculado (condición de
igualdad): CS3 = 1
Notas:
* el uso de un método u otro para la ejecución de los operadores depende de la implementación de la tabla y de los
índices disponibles.
** el coste se estima por el número de bloques transferidos de disco a memoria principal (se ignora el coste 72
computacional, el coste de almacenamiento intermedio, y otros factores).
En Cs2, se supone que el fichero está ordenado por el atributo de búsqueda. En primer lugar, se
estima el coste de la búsqueda binaria hasta encontrar el primer registro que cumple la
condición (log2b). El número de bloques sucesivos, accedidos en la búsqueda, dependerá del
atributo de la condición:
• Si el atributo es un atributo clave (s=1), Cs2 = log2b
• Si el atributo no es un atributo clave (s1), Cs2 = log2b+(s/fb) 1
En Cs3, el coste es 1, ya que la función de direccionamiento devuelve el bloque (cubo) donde se
encuentra el registro o los registros buscados. En caso de que existan cubos de desborde, el
coste aumenta.
72
5 Optimización basada en estimación de costes.
Estudio de coste para la selección ():
S4. Búsqueda con índices:
Índice multinivel sobre atributo clave (condición de igualdad)
CS4 = x + 1
Índice multinivel sobre atributo no clave (condición de igualdad)
• En fichero ordenado: CS4 = x + (s/fb)
• En fichero desordenado: CS4 = x + s
Índice multinivel para condición de rango en fichero ordenado:
CS4 = x + b/2 (promedio)
73
73
5 Optimización basada en estimación de costes.
Estudio de coste para la concatenación (R S):
Nota:
* R es la cardinalidad de R (cantidad de filas de R).
74
74
5 Optimización basada en estimación de costes.
Estudio de coste para la concatenación (R S):
𝐶 𝑏 𝑏 ∗𝑏 𝑗𝑠 ∗ 𝑅 ∗ 𝑆 /𝑓𝑏
75
75
5 Optimización basada en estimación de costes.
Estudio de coste para la concatenación (R S):
Nota:
* h es el número medio de bloques de S, accedidos para recuperar un registro, a partir de un
valor del campo de direccionamiento. En el caso de un fichero disperso donde sus cubos son
de un solo bloque y no hay desbordamiento, h sería igual a 1. 76
76
5 Optimización basada en estimación de costes.
Estudio de coste para la concatenación (R S):
77
77
5 Optimización basada en estimación de costes.
Estudio de coste para la concatenación (R S):
𝐶 𝑏 𝑏 𝑗𝑠 ∗ 𝑅 ∗ 𝑆 /𝑓𝑏
78
78