Está en la página 1de 78

Diseño y Gestión de Bases de

Datos
Tema 9
Optimización de consultas en
Bases de Datos

Profesoras: Laura Mota y Mª José Vicent

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”.

El objetivo de un SGBD es el procesamiento correcto de transacciones (Tema 2 y Tema 3), en un


entorno concurrente (Tema 4). Este objetivo se extendió posteriormente (Tema 5),
incorporando la búsqueda de la eficiencia en la ejecución de las transacciones.
En el Tema 5, la consecución de este segundo objetivo se planteó desde la perspectiva del
diseño físico, se trataba de buscar la implementación más adecuada para las tablas de la base de
datos. Como se vio, la implementación de una tabla favorece unas operaciones y ralentiza otras.
Por ello, el estudio del uso y el tamaño de las tablas y las ventajas e inconvenientes de cada
implementación deben guiar la elección de la implementación de cada tabla en memoria
secundaria.
En el diseño físico, el análisis del uso de las tablas es muy importante, hay tablas que se
actualizan mucho (volátiles) y otras que, sin embargo, son muy estáticas; por otro lado, las tablas
se consultan siguiendo unos patrones determinados, hay consultas mucho más frecuentes que
otras.
La operación de consulta es la operación más frecuente en una base de datos. En bases de datos
relacionales, la consulta se realiza con la instrucción SELECT del lenguaje SQL. El lenguaje SQL es
un lenguaje muy declarativo, en una SELECT, se especifican las condiciones que deben cumplir
los datos que se desea consultar, sin tener en cuenta la implementación de las tablas, ni los
procedimientos de ejecución de la consulta que utiliza el SGBD.
Este carácter tan declarativo del lenguaje obliga al SGBD a elaborar un plan de ejecución, para
cada consulta, que sea lo más eficiente posible, es decir, que invierta el menor tiempo de
ejecución. Para ello, los SGBDs tienen un módulo de optimización de consultas. El estudio de
este módulo es el objetivo de este tema.

4
1 Introducción.
Clasificación de las estrategias de optimización:

 Basadas en la aplicación de reglas heurísticas:


 Transformación de la consulta en otra equivalente, que
(heurísticamente) es más económica, utilizando reglas de
transformación sintácticas.
(No se usa información física (estadística) sobre la BD).

 Basadas en la estimación de costes:


 Elección de la estrategia de ejecución más económica,
utilizando información física sobre la BD.
(Se usa información física (estadística) sobre la BD).

Existen dos estrategias para optimizar la ejecución de las consultas:


• Usar reglas sintácticas que transforman la consulta del usuario en otra que (heurísticamente)
es más eficiente, sin tener en cuenta las características físicas de las tablas (tamaño,
implementación, …).
• Hacer una estimación del coste para distintas alternativas de ejecución de la consulta,
utilizando información física de las tablas (tamaño, implementación, …), y elegir la más
económica.

5
1 Introducción.
Módulo optimizador del SGBD:

 Basado en reglas heurísticas:


 Toma su decisión utilizando ciertas reglas sintácticas.
 Estas reglas pueden ser elegidas o alteradas por el
administrador de la BD.
 Basado en costes:
 Toma su decisión automáticamente en función de
información almacenada en el sistema.
 No hay intervención del administrador de la BD.
 Combinación de costes y reglas heurísticas.

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.

4. Ejecución del código.

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

1) La instrucción SELECT del usuario se valida sintácticamente, y se traduce a una forma


canónica, en Álgebra Relacional (antes de realizar la optimización).
2) Se aplica la estrategia de optimización del sistema a la expresión de Álgebra Relacional,
obtenida en el paso anterior, y se genera un plan de ejecución para ella.
3) El plan de ejecución, obtenido en el paso anterior, se traduce en código de ejecución.
4) El código, obtenido en el paso anterior, se ejecuta.

8
1 Introducción.
Ejemplo: Instrucción SQL

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;

“Obtener el código y el nombre de las


asignaturas con más de 3 créditos de
teoría en las que algún profesor
imparte más de 2 grupos de teoría.”

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;

((Asignatura A × Docencia D) DONDE A.cod_asg=D.cod_asg 


A.teoría > 3  D.gteo>2) [A.cod_asg, A.nombre]

Representación de la
consulta: expresión de
Álgebra Relacional

10

Obsérvese la traducción de la SELECT original del usuario en una expresión de Álgebra


Relacional: secuencia de operaciones.
A partir de este momento, todo el proceso de optimización se realizará en Álgebra Relacional.
En el ejemplo anterior, se ha utilizado para la expresión en Álgebra Relacional, la sintaxis
utilizada en la asignatura de Bases de Datos y Sistemas de Información, esta sintaxis, sin
embargo, no es estándar ni tampoco la utilizada en Oracle. Más adelante se cambiará la sintaxis
para adecuarse a la que utiliza Oracle.

10
1 Introducción.
Ejemplo: Instrucción SQL
2. Optimización de la consulta (optimización 1)

((Asignatura A × Docencia D) DONDE A.cod_asg=D.cod_asg 


A.teoría > 3  D.gteo>2) [A.cod_asg, A.nombre]

Árbol de consulta Árbol de consulta optimizado

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

En la transparencia, se muestra una posible optimización sintáctica de la consulta original. La


expresión de Álgebra Relacional, que traduce la SELECT del usuario, se representa como un árbol
de consulta.
En un árbol de consulta, las tablas que participan en la consulta aparecen en las hojas del árbol, y
los operadores (de derecha a izquierda) en los nodos internos (de abajo a arriba).
En el ejemplo, se observa la aplicación de una regla de transformación sintáctica que sustituye el
producto cartesiano entre Asignatura y Docencia y una condición de selección
(A.cod_asg=D.cod_asg) por una operación de concatenación entre las mismas tablas.
La optimización se basa en la aplicación de una regla heurística que asegura que la ejecución de
una operación de concatenación es más eficiente que la ejecución de un producto cartesiano
seguido de la correspondiente operación de selección (con condición de concatenación entre
ambas tablas).

11
1 Introducción.
Ejemplo: Instrucción SQL
2. Optimización de la consulta (optimización 2)

((Asignatura A × Docencia D) DONDE A.cod_asg=D.cod_asg 


A.teoría > 3  D.gteo>2) [A.cod_asg, A.nombre]

Árbol de consulta Árbol de consulta optimizado

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

En la transparencia, se muestra otra posible optimización sintáctica de la consulta original.


En el ejemplo, se observa la aplicación de dos reglas de transformación sintáctica:
• Una regla que mueve hacia abajo, en el árbol de consulta, las condiciones que afectan a una
sola tabla (A.teoría > 3 a la tabla Asignatura, y D.gteo > 2 a la tabla Docencia).
• Una regla que sustituye el producto cartesiano entre Asignatura y Docencia y una condición
de selección (A.cod_asg=D.cod_asg) por una operación de concatenación entre ambas tablas.
La optimización se basa en la aplicación de dos reglas heurísticas que aseguran que:
• La ejecución de una operación de concatenación es más eficiente que la ejecución de un
producto cartesiano seguido de la correspondiente operación de selección.
• La ejecución temprana de condiciones de selección sobre las tablas reduce su tamaño, y hace
más eficiente la ejecución de operaciones posteriores sobre ellas.
La aplicación sucesiva de reglas de transformación sintáctica, al árbol de consulta original,
produce el árbol de consulta optimizado.

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

Bucle único (índice A.cod_asg) (en flujo)

DONDE A.teoría > 3 DONDE D.gteo > 2

Búsqueda en índice Búsqueda lineal


sobre teoría (materialización)
(materialización)
A D

A: Asignatura
D: Docencia 13

Una vez optimizada la consulta, el optimizador debe elegir un método de ejecución


(procedimiento de ejecución) para cada operador que aparece en el árbol de consulta
optimizado. En el ejemplo, los métodos de ejecución elegidos aparecen recuadrados.
Los distintos métodos de ejecución para cada operador del Álgebra Relacional dependen de la
implementación de la tabla (o tablas) y de los índices asociados.
Si el sistema dispone de distintos métodos de ejecución para un operador, el optimizador elegirá
el más adecuado, teniendo en cuenta esa información y, en algunos casos, información física
(estadística) sobre las tablas.
En el punto 3 del tema, se estudiarán los métodos de ejecución alternativos para cada operador
del Álgebra Relacional.
El plan de ejecución consiste en el árbol de consulta optimizado más los métodos de ejecución
de los operadores que aparecen en el árbol.

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

4. Ejecución del código

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’)

SELECT MAX(teoría) Bloque


C = FROM Asignatura
interno
WHERE cod_dep=‘DSIC’

SELECT nombre Bloque


FROM Asignatura externo
WHERE teoría > C

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íaC  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)

Los métodos (algoritmos) de ejecución de las operaciones del AR dependen


de la organización de fichero y de los índices utilizados en la implementación
de la tabla o tablas que intervienen en la operación.
tabla  fichero (filas  registros)
20

En la transparencia, se presentan todas las operaciones de Álgebra Relacional, con la notación


simplificada que se va a utilizar.
La ordenación externa no es una operación de Álgebra Relacional, pero se utiliza en muchos de
los métodos de ejecución de los operadores del Álgebra Relacional, como se verá a continuación.

20
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Ordenación externa (en MS):

 Algoritmo para realizar ordenaciones (de filas) en la ejecución


de algunas operaciones de A.R:
 ORDER BY.
 Concatenación.
 Unión e Intersección.
 Proyección con DISTINCT: eliminación de duplicados.
 Adecuada para grandes ficheros en disco (tablas).

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 (nB1, 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

El operador   representa el redondeo al entero superior.


EJEMPLO
División:
• Tamaño del fichero (nF bloques) = 1024
• MP disponible (nB bloques) = 5
• Nro. de runs iniciales nR=1024/5  204 (de 5 bloques) + 1 (de 4 bloques) = 205 runs.
Ordenación:
• Se ordena internamente cada run en MP y se graba a disco como run ordenado.
Fusión:
• Grado de fusión dM= menor((nB‐1), nR) = menor(4, 205) = 4 (los runs se fusionan de 4 en 4).
• Se usan 4 bloques de MP para recibir secuencialmente los bloques de 4 runs a fusionar, y 1
bloque de MP (el quinto) para ir almacenando el resultado de la fusión (una vez lleno se
traslada a disco).
1ª pasada: 205 DIV 4 = 51 runs ordenados (de 20 bloques) + 1 run ordenado (de 4 bloques) = 52
runs (después de la 1ª pasada tenemos 52 runs ordenados)
2ª pasada: 52 DIV 4= 13 runs
3ª pasada: 13 DIV 4= 3 runs + 1 run
4ª pasada: 4/4 = 1 runs (el fichero ya está ordenado)
log4 (205) = 3,83 = 4

22
3 Algoritmos de ejecución de las operaciones básicas de consulta.
Ordenación externa: Algoritmo ordenar‐fusionar (sort‐merge)

 Número de accesos a disco:

(2  nF) + (2  nF  logdM nR )

Accesos en la fase de Accesos en la fase de fusión


ordenación (lectura y escritura por
(lectura y escritura) nº iteraciones)

2  nF  (1 + logdM nR )

23

En la fase de ordenación, todos los bloques del fichero se leen y se escriben.


En la fase de fusión, todos los bloques del fichero se leen y se escriben tantas veces como
iteraciones son necesarias para fusionar los runs iniciales.

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

Una condición compleja es una combinación lógica de condiciones simples.


La ejecución de una selección con condición compleja conjuntiva consiste en obtener la
intersección de los conjuntos de registros que cumplen todas las condiciones simples.
En la ejecución de esta operación, son muy útiles los índices definidos sobre los atributos de las
condiciones simples o sobre combinaciones de ellos.
En el caso del uso de varios índices, si las entradas de los índices contienen punteros a bloques
(en lugar de punteros a registros), la búsqueda es más compleja.
Ejemplo:
SELECT nombre FROM Profesor
WHERE teléfono=0000 AND cod_dep=‘DSIC’:
Si Profesor tiene un índice definido sobre el atributo teléfono, se usa el método S5: se selecciona,
usando el índice, el conjunto de registros que cumplen la primera condición, y sobre estos
registros se evalúa la segunda condición.
Si Profesor tiene un índice definido sobre los atributos teléfono+cod_dep, se usa el método S6:
se selecciona, usando el índice, el conjunto de registros que cumplen las dos condiciones.
Si Profesor tiene dos índices definidos sobre los atributos teléfono y cod_dep, se usa el método
S7: se seleccionan, usando los índices, dos conjuntos de punteros a registros que cumplen las
condiciones, y se hace la intersección de estos dos conjuntos.
Si Profesor no tiene definidos índices se usa el método S1.

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

La operación de selección sobre una tabla se traduce en una operación de búsqueda en el


fichero que implementa la tabla.
El concepto de selectividad de una condición de selección (en tablas) coincide con el concepto
de selectividad de una condición de búsqueda (en ficheros).

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

La operación de concatenación natural (concatenación interna con condición de igualdad) de


dos tablas se puede ejecutar por distintos métodos.
En las transparencias, se presentan cuatro métodos que son ilustrados gráficamente.

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.

El problema principal en la ejecución de la operación de proyección reside en la eliminación de


filas duplicadas del resultado.
La eliminación de duplicados se puede hacer de dos formas:
a) Ordenando el resultado de la proyección, y eliminando los duplicados durante el proceso de
ordenación (técnica de ordenación).
b) Almacenando el resultado de la proyección en un fichero disperso, y eliminando los
duplicados durante el proceso de creación de este fichero. En este caso, el fichero disperso
se crea con una función de dispersión sobre todos los atributos de la proyección (técnica de
uso de copias hash).

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.

Ejemplo: R LEFT JOIN S


 R se coloca en el bucle externo o en el bucle único.
 Si el registro de R se combina con registros de S, en el resultado aparecen
las combinaciones.
 Si el registro de R no se combina con ningún registro de S, el registro
también aparece en el resultado final combinado con una fila virtual de S
formada con valores nulos en todos los atributos.
37

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.”

 Computar como una combinación de operaciones de AR


SELECT P.nombre, D.cod_asg
FROM Profesor P LEFT JOIN Docencia D ON P.cod_pro=D.cod_pro;
 Realizar la concatenación interna para obtener los profesores con docencia:
TEMP1  P.nombre,D.cod_asg(Profesor P P.cod_pro=D.cod_pro Docencia D)
 Buscar los nombre de profesores que no tienen docencia:
TEMP2  P.nombre Profesor  P.nombre TEMP1
 Combinar con valores nulos cada una de los registros de TEMP2:
TEMP3 TEMP2 בNULL’
 Unir TEMP1 y TEMP3 para producir la concatenación externa:
RESULTADO  TEMP1  TEMP3
38

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.

 Uso de reglas sintácticas (heurísticas) para transformar el árbol de


consulta.
 Árbol de consulta
 Estructura de datos utilizada para la representación interna de una consulta.
 Representa una expresión de Álgebra Relacional.
 Plan de ejecución de una consulta
 Árbol de consulta extendido con los métodos para computar los operadores
del árbol.

40

La optimización basada en reglas heurísticas consiste en el uso de reglas de transformación


sintácticas que pueden mejorar el tiempo de ejecución de la consulta.
En esta aproximación, el optimizador dispone de un conjunto de reglas de transformación
sintácticas ya implementadas.
Estas reglas se aplican sucesivamente al árbol de consulta original (expresión de Álgebra
Relacional) hasta conseguir un árbol de consulta optimizado.
Es importante recordar que el objetivo no es conseguir el árbol de consulta óptimo. Se trata de
reducir el tiempo de ejecución de la consulta original.
Estas reglas de transformación sintácticas no tienen en cuenta las características físicas de las
tablas (implementación, tamaño).

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 (nodoshijo)
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:

“Código y nombre de las asignaturas que


imparten los profesores del departamento
DSIC”

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.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.cod _ asg , A.nombre


 P.cod _ pro  D.cod _ pro  A.cod _ asg  D.cod _ asg  P.cod _ dep  'DSIC '


 A

P D
A: Asignatura
D: Docencia
P: Profesor
43

En la transparencia, se presenta el árbol de consulta original, para la consulta de ejemplo.


El árbol representa la expresión de Álgebra Relacional que traduce la SELECT del usuario.

43
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: 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.cod _ asg , A.nombre


 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
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

Es importante observar, como se ve en el ejemplo, que una expresión de Álgebra Relacional es


una secuencia de operadores. En su representación como árbol de consulta, estos operadores
aparecen en los nodos internos del árbol. El árbol se ejecuta de abajo hacia arriba y de izquierda
a derecha.
Las reglas de transformación sintáctica mueven o combinan estos operadores en el árbol,
buscando una ejecución más eficiente.
En las transparencias siguientes, se estudiará un conjunto de reglas de transformación sintáctica
que explican la optimización que se muestra en el ejemplo.

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:
 c1c 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

Las reglas de transformación sintáctica para Álgebra Relacional se basan en el significado


(semántica) y las propiedades de los operadores del lenguaje.
No necesitan explicación.

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

10. Conmutatividad de  con las operaciones conjuntistas ,  y :


 c ( R  S )( c ( R))  ( c ( S ))
 c ( R  S )( c ( R))  ( c ( S ))
 c ( R  S )( c ( R))  ( c ( S ))

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

Un algoritmo de optimización sintáctico consiste en la aplicación ordenada de reglas de


transformación sintáctica.
La aplicación de algunas reglas significa, en sí mismas, una optimización, otras reglas sirven para
preparar el árbol para la aplicación posterior de otras reglas.

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))

 A.nombre,A. semestre  A.nombre, A.semestre Ordenación (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

En la transparencia, se muestra un ejemplo de generación del plan de ejecución de una consulta,


sobre la misma base de datos de “Docencia”.

Es importante observar que la elección de un método para un operador responde a las


características de implementación de la tabla (o tablas) implicadas.
Por ejemplo, se sobreentiende que la tabla Departamento tiene un índice definido sobre el
atributo nombre, por lo que se puede usar el método S4 para la ejecución de la operación de
selección, esto significará una mejora del tiempo de ejecución, respecto al método de búsqueda
lineal en la tabla.

56
4 Optimización basada en reglas heurísticas.

“Código y nombre de las asignaturas que imparten los profesores del departamento DSIC”

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’

Árbol de consulta sin optimizar


 A.cod _ asg , A.nombre

 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

P D  A.cod _ asg  D.cod _ asg


1

 P.cod _ dep  'DSIC '


 A

P D
58

58
4 Optimización basada en reglas heurísticas.

 A.cod _ asg , A.nombre

 P.cod _ pro  D.cod _ pro  A.cod _ asg , A.nombre

 A.cod _ asg  D.cod _ asg 6 (2 veces)  P.cod _ pro  D.cod _ pro

 P.cod _ dep  'DSIC '  A.cod _ asg  D.cod _ asg

 
 A
 A

P D  P.cod _ dep  'DSIC ' D

P
59

59
4 Optimización basada en reglas heurísticas.

 A.cod _ asg , A.nombre  A.cod _ asg , A.nombre

 P.cod _ pro  D.cod _ pro  A.cod _ asg  D.cod _ asg

 A.cod _ asg  D.cod _ asg 2  P.cod _ pro  D.cod _ pro

 
 A  A

 P.cod _ dep  'DSIC ' D  P.cod _ dep  'DSIC ' D

P P

60

60
4 Optimización basada en reglas heurísticas.

 A.cod _ asg , A.nombre


 A.cod _ asg , A.nombre
 A.cod _ asg  D.cod _ asg  A.cod _ asg  D.cod _ asg

 P.cod _ pro  D.cod _ pro


6

  P.cod _ pro  D.cod _ pro A

 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

 A.cod _ asg  D.cod _ asg

  A.cod _ asg , A.nombre


12 (2 veces)
 P.cod _ pro  D.cod _ pro A
A.cod _ asg  D .cod _ asg

 P .cod _ pro  D .cod _ pro A


 P.cod _ dep  'DSIC ' D  P.cod _ dep  'DSIC ' D

P
P

62

62
4 Optimización basada en reglas heurísticas.

Árbol de consulta sin optimizar

Árbol de consulta optimizado

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.

 Estimar y comparar el “coste” (tiempo de ejecución) de la


consulta, para diferentes planes de ejecución.
 Elegir el plan de menor coste estimado:
 Es necesario estimar el coste de forma precisa.
 Limitar el número de planes a comparar (consumo de tiempo).
 Indicado para consultas compiladas.
 Estudio de la estimación del “coste”:
 Componentes del coste en la ejecución de consultas.
 Información disponible en el catálogo (diccionario) del sistema.
 Ejemplos:
• Estudio de coste para la selección ( ).
• Estudio de coste para la concatenación ( ).

65

La optimización basada en costes consiste en estimar el coste de distintos planes de ejecución


para la consulta, y elegir el más económico.
Los distintas planes de ejecución se diferencian entre sí en el método elegido para la ejecución
de los operadores de la consulta.
En la estimación del coste, de cada plan, se tiene en cuenta información estadística almacenada
periódicamente en el sistema, relativa a las características físicas de la base de datos.

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:

1. Coste de acceso al almacenamiento secundario (disco):


Coste de leer y escribir bloques en disco.
 La cantidad de bloques accedidos (leer o escribir) dependerá de los
métodos utilizados en la ejecución de la consulta.
2. Coste de almacenamiento: Coste del almacenamiento de
ficheros intermedios generados durante la ejecución de la
consulta.
3. Coste computacional: Coste de las operaciones sobre datos
realizadas en memoria principal: ordenaciones de registros,
fusiones de registros para las concatenaciones,
comparaciones, etc.

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:

4. Coste de uso de memoria: Número de buffers de memoria


necesarios durante la ejecución de la consulta.
5. Coste de comunicaciones: Coste de mandar la consulta y sus
resultados al terminal donde se originó la consulta.

67

67
5 Optimización basada en estimación de costes.
Componentes del coste en la ejecución de consultas:

 Grandes bases de datos:


 Se pone el énfasis en minimizar el coste de acceso a disco.
 Se desprecia el resto de componentes del coste.
 Pequeñas bases de datos:
 Los datos pueden estar en memoria principal.
 Se pone el énfasis en minimizar el coste computacional.
 Bases de datos distribuidas:
 Es importante el coste de comunicaciones.

68

68
5 Optimización basada en estimación de costes.
Información del catálogo (diccionario) usada en la
estimación del coste:

 Ficheros que implementan las tablas:


 Número de registros (r).
 Tamaño medio de los registros (R).
 Número de bloques (b).
 Factor de bloque (fb).
 Índices:
 Atributos (campos) de indexación.
 Número de niveles del índice (x).

69

En la transparencia, se muestran distintos tipos de información estadística, almacenada por el


servidor, en las tablas del diccionario (catálogo) del sistema.
Esta información es relativa a las tablas y sus atributos y a los índices definidos.

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).

En Cs1, la búsqueda es lineal:


• Si el atributo de la condición no es un atributo clave, entonces, tanto si existen registros como
si no existen, como puede haber varios, habrá que recorrer todos los bloques del fichero (b).
• Si el atributo de la condición es un atributo clave, entonces, si existe el registro, habrá que
recorrer, por término medio, la mitad de los bloques (b/2); si no existe, habrá que recorrer
todos los bloques del fichero (b).

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 (s1), 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

En Cs4, la búsqueda se hace usando un índice, definido sobre el atributo de la condición de


selección.

73
5 Optimización basada en estimación de costes.
Estudio de coste para la concatenación (R S):

 Selectividad de la concatenación (js)


0 ≤ js ≤ 1 js  ( R  R. A S .B S ) / ( R  S )  ( R  R. A S .B S ) /( R  S )

 Se estima js para las condiciones de concatenación más


comunes:
 Cardinalidad de la concatenación:
( R  R. A S . B S )  js * R  S
 Bloques de R: bR y bloques de S: bS

Nota:
* R es la cardinalidad de R (cantidad de filas de R).
74

La cardinalidad del producto cartesiano de dos tablas es el producto de las cardinalidades de


ambas tablas (es el número total de pares de filas posibles (de ambas tablas)).
La selectividad de una concatenación es el cociente entre el número de pares de filas (de ambas
tablas) que cumplen la condición de concatenación y la cardinalidad del producto cartesiano.
La cardinalidad de la concatenación de dos tablas es igual a la selectividad de la concatenación
por la cardinalidad del producto cartesiano.
La selectividad para distintas condiciones de concatenación, así como la cardinalidad de las
tablas, es información estadística recopilada periódicamente por el sistema, y mantenida en su
diccionario de datos (catálogo).

74
5 Optimización basada en estimación de costes.
Estudio de coste para la concatenación (R S):

 C1. Método de bucle anidado:


 R se recorre en el bucle externo y S en el interno.
 Se asumen tres buffers (B1, B2, B3) en memoria principal.
 Factor de bloque del resultado de la concatenación: fbRS

𝐶 𝑏 𝑏 ∗𝑏  𝑗𝑠 ∗ 𝑅 ∗ 𝑆 /𝑓𝑏 

Lectura (en B1) Lectura (en B2) Escritura (desde B3)


de bloques de R de bloques de S de bloques de R S

75

En la transparencia, se estima el número de accesos a bloques, en la operación de


concatenación, cuando ésta se ejecuta con el método del bucle anidado.
Ejecución del bucle anidado:
• Lectura de los bR bloques de R.
• Por cada bloque de R, lectura de los bS bloques de S.
• Escritura de los bloques ocupados por las filas resultantes de la concatenación: cardinalidad
de la concatenación dividido por el factor de bloque de la concatenación.

Cardinalidad de la concatenación: selectividad de la concatenación por la cardinalidad del


producto cartesiano.
Factor de bloque de la concatenación: tamaño del bloque dividido por el tamaño de las filas
resultantes de la concatenación.

75
5 Optimización basada en estimación de costes.
Estudio de coste para la concatenación (R S):

 C2. Método de bucle único:


 Existe un índice sobre el atributo (clave) B de S con xB niveles:
𝐶 𝑏 𝑅 ∗ 𝑥 1  𝑗𝑠 ∗ 𝑅 ∗ 𝑆 /𝑓𝑏 

 S está implementada como fichero disperso sobre B:


𝐶 𝑏 𝑅 ∗ℎ 𝑗𝑠 ∗ 𝑅 ∗ 𝑆 /𝑓𝑏 

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

En la transparencia, se estima el número de accesos a bloques, en la operación de


concatenación, cuando ésta se ejecuta con el método del bucle único.
Para usar este método, una de las tablas debe tener definido un índice sobre el atributo de
concatenación, o debe estar implementada como un fichero disperso con direccionamiento
sobre el atributo de concatenación.
Si S tiene un índice definido sobre el atributo B:
• Lectura de los bR bloques de R (bucle único).
• Por cada fila de R, lectura de xB bloques del índice de S, definido sobre B, más una lectura
adicional de un bloque de la tabla S.
• Escritura de los bloques ocupados por las filas resultantes de la concatenación: cardinalidad
de la concatenación dividido por el factor de bloque de la concatenación.
Si S está implementada como un fichero disperso, con función de direccionamiento sobre el
atributo B:
• Lectura de los bR bloques de R (bucle único).
• Por cada fila de R, lectura de h bloques de S, para encontrar una fila de S con un valor
determinado en el atributo B.
• Escritura de los bloques ocupados por las filas resultantes de la concatenación: cardinalidad
de la concatenación dividido por el factor de bloque de la concatenación.

76
5 Optimización basada en estimación de costes.
Estudio de coste para la concatenación (R S):

 C3. Método de ordenación‐fusión:


 Si los ficheros están ordenados:
𝐶 𝑏 𝑏  𝑗𝑠 ∗ 𝑅 ∗ 𝑆 /𝑓𝑏 

 Si los ficheros no están ordenados (sumar el coste de ordenar):

𝐶 2 ∗ 𝑏 ∗ 1 log 𝑏 2∗𝑏 ∗ 1 log 𝑏


𝑏 𝑏  𝑗𝑠 ∗ 𝑅 ∗ 𝑆 /𝑓𝑏 

77

En la transparencia, se estima el número de accesos a bloques, en la operación de


concatenación, cuando ésta se ejecuta con el método de ordenación‐fusión.
Para usar este método, las tablas deben estar ordenadas por el campo de concatenación, o
deben ordenarse previamente.
Si las tablas están ordenadas:
• Lectura de los bR bloques de R y los bS bloques de S, en paralelo (bucle único).
• Escritura de los bloques ocupados por las filas resultantes de la concatenación: cardinalidad
de la concatenación dividido por el factor de bloque de la concatenación.
Si las tablas no están ordenadas:
• Bloques accedidos (lectura, escritura) en la ordenación de R.
• Bloques accedidos (lectura, escritura) en la ordenación de S.
• Lectura de los bR bloques de R y los bS bloques de S, ya ordenados, en paralelo (bucle único).
• Escritura de los bloques ocupados por las filas resultantes de la concatenación: cardinalidad
de la concatenación dividido por el factor de bloque de la concatenación.
Se asume el uso de la técnica de ordenación externa para ordenar las dos tablas. Recordad el
coste en el apartado 3.

77
5 Optimización basada en estimación de costes.
Estudio de coste para la concatenación (R S):

 C4. Método de direccionamiento calculado:

𝐶 𝑏 𝑏  𝑗𝑠 ∗ 𝑅 ∗ 𝑆 /𝑓𝑏 

78

En la transparencia, se estima el número de accesos a bloques, en la operación de


concatenación, cuando ésta se ejecuta con el método de direccionamiento calculado.
En este método, de la tabla más pequeña, supongamos que es S, se genera una versión en
memoria principal con direccionamiento calculado; el coste es esta operación sería la lectura de
la tabla S, o sea, bS.
Posteriormente, se recorre en bucle la tabla R y para cada uno de sus registros, se busca los
registros de S (en la versión dispersa en memoria) que concatenan; el coste de esta operación
sería la lectura de la tabla R, o sea bR, ya que el coste del resto de operaciones es despreciable.
Por último, se escriben los bloques ocupados por las filas resultantes de la concatenación:
cardinalidad de la concatenación dividido por el factor de bloque de la concatenación.

78

También podría gustarte