Está en la página 1de 41

1

Tema 8. Procesamiento y optimizacin de consultas


8. Procesamiento y optimizacin de
consultas
Objetivos
- Comprender las tareas de procesamiento y optimizacin de
consultas realizadas por un sistema gestor de bases de datos
relacional.
- Conocer reglas heursticas y de transformacin de expresiones
del lgebra relacional y cmo aplicarlas para mejorar la
eficiencia de una consulta.
- Conocer diferentes estrategias de implementacin de
operaciones relacionales, en particular la de reunin (join), y
cmo evaluar el coste estimado de cada estrategia.
- Identificar la informacin estadstica de la base de datos
necesaria para estimar el coste de ejecucin de las
operaciones del lgebra relacional.
2
Tema 8. Procesamiento y optimizacin de consultas
8. Procesamiento y Optimizacin de
Consultas
Contenidos

8.1. Conceptos generales y objetivos del procesamiento y la
optimizacin de consultas
8.2. Pasos del procesamiento de una consulta
1. Anlisis lxico, sintctico y validacin
2. Optimizacin
8.3. Reglas generales de transformacin de expresiones y reglas
heursticas
8.4. Implementacin de operaciones relacionales
Anexo. Otros enfoques de la optimizacin: optimizacin semntica
3
Tema 8. Procesamiento y optimizacin de consultas
8. Procesamiento y optimizacin de
consultas

Bibliografa

[EN 2002] Elmasri, R.; Navathe, S.B.: Fundamentos de Sistemas de Bases de
Datos. 3 Edicin. Addison-Wesley. (Cap. 18)
[EN 1997] Elmasri, R.; Navathe, S.B.: Sistemas de bases de datos. Conceptos
fundamentales. 2 Ed. Addison-Wesley Iberoamericana. (Cap. 16)
[CBS 1998] Connolly et al.: Database Systems: A Practical Approach to
Design, Implementation and Management. 2
nd
Ed. Addison-
Wesley (Cap. 18)
4
Tema 8. Procesamiento y optimizacin de consultas
Crtica a los primeros sistemas basados en el modelo relacional:
bajo rendimiento de las consultas
Investigacin y desarrollo de algoritmos eficientes para procesar consultas
En un sistema no relacional...
Consultas expresadas en lenguaje procedural de bajo nivel (embebido, norm.)
El usuario (programador) selecciona la estrategia de ejecucin
optimizacin manual
Decide las operaciones necesarias y su orden de ejecucin
Si se equivoca, el sistema no puede mejorar la situacin por s solo
Debe tener conocimientos de programacin
(si no los tiene, no se beneficiar de la posibilidad de consultas ms ptimas)
En un sistema relacional...
Consultas expresadas con SQL: QU datos y no CMO recuperarlos
El SGBD selecciona la mejor estrategia de ejecucin
y tiene mayor control sobre el rendimiento del sistema
optimizacin automtica
8.1 Conceptos generales y objetivos
5
Tema 8. Procesamiento y optimizacin de consultas
La optimizacin [automtica| es...
Un reto:
obligatorio si se debe lograr un tiempo de ejecucin de consultas aceptable
Una oportunidad:
el alto nivel semntico de una expresin relacional permite su optimizacin
antes de la ejecucin
Procesamiento de Consultas
Actividades involucradas en la recuperacin de datos de la BD
Optimizacin de Consultas
Eleccin de una estrategia de ejecucin eficaz para procesar cada
consulta sobre la base de datos
8.1 Conceptos generales y objetivos
6
Tema 8. Procesamiento y optimizacin de consultas
Objetivos del procesamiento de consultas
Transformar una consulta SQL en una estrategia de ejecucin
eficaz, expresada en un lenguaje de bajo nivel
Ejecutar dicha estrategia para recuperar los datos requeridos
Objetivo de la optimizacin de consultas
Elegir la estrategia de ejecucin que minimiza el uso de los
recursos
Existen muchas transformaciones equivalentes para una misma
consulta
En general, no se garantiza que la estrategia elegida por el
SGBD sea la ptima, pero seguro que ser una estrategia
razonablemente eficiente
8.1 Conceptos generales y objetivos
7
Tema 8. Procesamiento y optimizacin de consultas
Ventajas de la optimizacin automtica
El usuario no se preocupa de cmo formular la consulta
El Mdulo Optimizador trabaja mejor que el programador, pues:
Dispone de informacin estadstica en el diccionario de datos del SGBD
mayor precisin al estimar la eficiencia de cada posible estrategia...
y as (con mayor probabilidad) elegir la ms eficiente
Si cambian las estadsticas (tras reorganizacin fsica del esquema de BD,...)
Re-optimizacin (quiz ahora convenga elegir otra estrategia)
SGBD Relacional: (trivial) El Optimizador re-procesa la consulta original
SGBD No Relacional: modificacin del programa!
El Optimizador es un programa
tiene ms paciencia que un programador: considera ms estrategias
El Optimizador es el compendio de aptitudes y servicios de los
mejores programadores
8.1 Conceptos generales y objetivos
8
Tema 8. Procesamiento y optimizacin de consultas

1. Anlisis lxico, sintctico y validacin
2. Optimizacin
3. Generacin de cdigo
4. Ejecucin

Estudiaremos con detalle los dos primeros pasos
8.2 Pasos del procesamiento de una consulta
9
Tema 8. Procesamiento y optimizacin de consultas
Anlisis lxico
Identificar los componentes (lxicos) en el texto de la consulta (SQL)
Anlisis sintctico
Revisar la sintaxis de la consulta (correccin gramtica)
Validacin semntica
Verificar la validez de los nombres de las tablas, vistas, columnas, etc. y si
tienen sentido
Traduccin de la consulta a una representacin interna
que la mquina manipula mejor,
eliminando peculiaridades del lenguaje de alto nivel empleado (SQL),
El formalismo base de la representacin interna debe ser...
rico, para representar toda consulta posible
neutral, sin predisponer a ciertas opciones de optimizacin
La mejor eleccin: lgebra Relacional
1. Anlisis lxico, sintctico y validacin
8.2 Pasos del procesamiento de una consulta
10
Tema 8. Procesamiento y optimizacin de consultas
Nombres de los empleados que trabajan en el proyecto n 2
SELECT nombrep
FROM Empleado E, Trabaja_en T
WHERE E.nss = T.nsse AND T.nump=2 ;
resultado
|
proyectar(E.nombrep)
|
restringir(T.nump = 2)
|
reunir(E.nss = T.nsse)
| |
EMPLEADO(E) TRABAJA_EN(T)
rbol de Consulta
(o rbol sintctico abstracto)
es la representacin de una
expresin algebraica
nombrep
(
nump=2
(EMPLEADO
nss=nsse
TRABAJA_EN))
1. Anlisis lxico, sintctico y validacin (y 2)
8.2 Pasos del procesamiento de una consulta
11
Tema 8. Procesamiento y optimizacin de consultas
El Optimizador de Consultas suele combinar varias tcnicas
Las tcnicas principales son las siguientes:

Optimizacin heurstica
Ordenar las operaciones de la consulta para incrementar la
eficiencia de su ejecucin

Estimacin de costes
Estimar sistemticamente el costo de cada estrategia de ejecucin y
Elegir el plan (estrategia) con el menor costo estimado

2. Optimizacin
8.2 Pasos del procesamiento de una consulta
12
Tema 8. Procesamiento y optimizacin de consultas
Varias expresiones del lgebra Relacional pueden corresponder a
la misma consulta
Lenguajes de consulta, como SQL permiten expresar una misma
consulta de muchas formas diferentes, pero el rendimiento no
debe depender de cmo sea expresada la consulta
Optimizacin Heurstica
Aplicacin de reglas de transformacin y heursticas para
modificar la representacin interna de una consulta (lgebra
Relacional o rbol de consulta) a fin de mejorar su
rendimiento
2. Optimizacin (2)
8.2 Pasos del procesamiento de una consulta
13
Tema 8. Procesamiento y optimizacin de consultas
El Analizador Sintctico genera rbol de consulta inicial
sin optimizacin ejecucin ineficiente

El Optimizador de Consultas transforma el rbol de consulta
inicial en rbol de consulta final equivalente y eficiente
Aplicacin de reglas de transformacin
guiadas por reglas heursticas

Conversin de la consulta en su forma cannica equivalente
2. Optimizacin (3)
8.2 Pasos del procesamiento de una consulta
14
Tema 8. Procesamiento y optimizacin de consultas
Estimacin sistemtica de costes:
Estimacin y comparacin de los costes de ejecutar una
consulta con diferentes estrategias, y elegir la estrategia
con menor coste estimado
Obtenida la forma cannica de la consulta, el Optimizador decide
cmo evaluarla
El punto de partida es considerar la consulta como una serie de
operaciones elementales interdependientes
Operaciones del lgebra Relacional:
JOIN, PROYECCIN, RESTRICCIN, UNION, INTERSECCIN ...
2. Optimizacin (4)
8.2 Pasos del procesamiento de una consulta
15
Tema 8. Procesamiento y optimizacin de consultas
El Optimizador tiene un conjunto de tcnicas para realizar cada
operacin
Ejemplo: tcnicas para implementar la operacin de Restriccin o
Bsqueda Lineal
Bsqueda Binaria
Empleo de ndice Primario o Clave de Dispersin
Empleo de ndice de Agrupamiento
Empleo de ndice Secundario

Cmo elige el Optimizador las tcnicas adecuadas en cada caso?
2. Optimizacin (5)
8.2 Pasos del procesamiento de una consulta
16
Tema 8. Procesamiento y optimizacin de consultas
Informacin
Estadstica
(diccionario de datos)
Informacin sobre la interdependencia
entre las operaciones de bajo nivel
Eleccin de varias tcnicas
candidatas para cada operacin
OPTIMIZADOR
2. Optimizacin (6)
8.2 Pasos del procesamiento de una consulta
17
Tema 8. Procesamiento y optimizacin de consultas
Informacin estadstica
Para cada tabla
Cardinalidad (n de filas),
Factor de bloques (n de filas que caben en un bloque),
N de bloques ocupados,
Mtodo de acceso primario y otras estructuras de acceso (hash,ndices,etc.),
Columnas indexadas, de dispersin, de ordenamiento (fsico o no), etc.
Para cada columna
N de valores distintos almacenados,
Valores mximo y mnimo, etc.
N de niveles de cada ndice de mltiples niveles

El xito de la estimacin del tamao y del coste de las operaciones incluidas
en una consulta, depende de la cantidad y actualidad de la informacin
estadstica almacenada en el diccionario de datos del SGBD
2. Optimizacin (7)
8.2 Pasos del procesamiento de una consulta
18
Tema 8. Procesamiento y optimizacin de consultas
El Optimizador genera varios planes de ejecucin
Plan de Ejecucin = combinacin de tcnicas candidatas
una tcnica por cada operacin elemental de la consulta
Cada tcnica tendr asociada una estimacin del coste
Coste(tcnica
i
) = n accesos a bloque de disco necesarios
Medida en nmero de transferencias de bloques memoria disco
La estimacin precisa de costes es difcil, pues para estimar el n de
accesos a bloque es necesario estimar el tamao de las tablas (base o
generadas como resultados intermedios), lo cual depende de los valores
actuales de los datos
2. Optimizacin (8)
8.2 Pasos del procesamiento de una consulta
19
Tema 8. Procesamiento y optimizacin de consultas
El Optimizador elige el plan de ejecucin ms econmico
Para ello formula una funcin de coste que se debe minimizar
Coste (plan
p
) E
i
coste (tcnica
ip
)

En general, existen muchos (demasiados!) posibles planes de
ejecucin para una consulta
La tarea de obtener el plan ms econmico, tendra un
coste prohibitivo
Se suele hacer uso de tcnicas heursticas para mantener el conjunto
de planes de consulta generados dentro de unos lmites razonables:
reduccin del espacio de evaluacin
2. Optimizacin (y 9)
8.2 Pasos del procesamiento de una consulta
20
Tema 8. Procesamiento y optimizacin de consultas
1. Una secuencia de restricciones sobre una tabla A puede transformarse en una
sola restriccin
o
C1
(o
C2
(A )) o
C1 AND C2
(A )
2. En una secuencia de proyecciones contra una tabla A pueden ignorarse todas,
salvo la ltima (si cada columna mencionado en la ltima, tambin aparece en
las dems)
t
P2
(t
P1
(A )) t
P2
(A ), sii P2 _ P1
3. Una restriccin de una proyeccin puede transformarse en una proyeccin de
una restriccin
o
C
(t
P
(A )) t
P
(o
C
(A ))
8.3 Reglas de transformacin de expresiones
Reglas generales de transformacin
Es una buena idea hacer
restriccin antes que proyeccin,
pues la restriccin reduce el tamao
de la entrada para la proyeccin
(el nmero de filas que considerar)
21
Tema 8. Procesamiento y optimizacin de consultas
4. o es distributivo respecto de la UNIN, INTERSECCIN y DIFERENCIA
o
C
(ROS) (o
C
(R)) O (o
C
(S))
donde O e { , , }
5. t es distributivo respecto de la UNIN

t
P
(RS) (t
P
(R)) (t
P
(S))
8.3 Reglas de transformacin de expresiones
Reglas generales de transformacin (2)
Distributividad
Sea f un operador unario y un operador binario,
f es distributivo respecto de si f(A B) = f(A) f(B)
se reduce el nmero de filas
examinadas en la siguiente
operacin en secuencia: O
(as, esa operacin ser ms rpida
y tambin producir menos filas)
22
Tema 8. Procesamiento y optimizacin de consultas
6. o es distributivo respecto de REUNIN (JOIN) si la condicin de seleccin c...
contiene columnas que slo pertenecen a una tabla
o
nump=2
(EMPLEADO
nss=nsse
TRABAJA_EN) EMPLEADO
nss=nsse
(o
nump=2
(TRABAJA_EN))

o puede escribirse como (c1 AND c2), y en c1 slo intervienen columnas de R1
y en c2 slo hay columnas de R2
o
c
(R1
J

R2) (o
c1
(R1))
J
(o
c2
(R2))
8.3 Reglas de transformacin de expresiones
Reglas generales de transformacin (3)
se reduce el nmero de filas
examinadas en la siguiente
operacin en secuencia: join
(as, esa operacin ser ms rpida
y tambin producir menos filas)
23
Tema 8. Procesamiento y optimizacin de consultas
7. t es distributivo respecto de JOIN si en la condicin de reunin J slo
intervienen columnas incluidos en la lista de proyeccin P
t
P
(R1
J

R2) (t
P_R1
(R1 ))
J
(t
P_R2
(R2 ))

sii P= (P_R1 P_R2) y P incluye toda columna de reunin que aparece en J
8.3 Reglas de transformacin de expresiones
Reglas generales de transformacin (4)
se reduce el n de columnas
que tratar en la siguiente
operacin en secuencia: join
(por tanto, esa operacin necesitar
menos tiempo para su ejecucin
y producir menos columnas )
24
Tema 8. Procesamiento y optimizacin de consultas
8. En lgebra Relacional, son conmutativas: UNIN, INTERSECCIN y JOIN
y no conmutativas: DIFERENCIA y DIVISIN



9. En lgebra Relacional, son asociativas: UNIN, INTERSECCIN y JOIN
y no asociativas: DIFERENCIA y DIVISIN




10. En lgebra relacional, son idempotentes : UNIN, INTERSECCIN y JOIN
y no idempotentes: DIFERENCIA y DIVISIN
Conmutatividad
Sea un operador binario, es conmutativo si A B = B A , A,B
Asociatividad
Sea un operador binario, es asociativo si A (BC)= (AB) C , A,B,C
Idempotencia
Sea un operador binario, es idempotente si A A = A, A
8.3 Reglas de transformacin de expresiones
Reglas generales de transformacin (5)
25
Tema 8. Procesamiento y optimizacin de consultas
Expresiones de cmputo escalar
El Optimizador debe conocer reglas de transformacin de expresiones
aritmticas, pues aparecen en las consultas
Reglas de transformacin basadas en propiedades Conmutativa, Asociativa
y Distributiva

Expresiones condicionales (booleanas)
El Optimizador debe saber aplicar reglas generales a operadores
de comparacin (>, <, ...) y
lgicos (AND, OR, ...)

8.3 Reglas de transformacin de expresiones
Reglas generales de transformacin (6)
26
Tema 8. Procesamiento y optimizacin de consultas
Sean a y b columnas de dos relaciones distintas, R(...a...) y S(...b...)
R
(a>b AND b>3)

S
- la condicin (a>b AND b>3) equivale a (a>b) AND (b>3) AND (a>3)
por ser > un operador transitivo
la nueva condicin (a>3), permite realizar una restriccin (sobre R)
antes del JOIN entre R y S ( join necesario para evaluar (a>b) )
(o
a>3
(R ))
a>b
(o
b>3
(S ))

Sean las columnas a, b, c, d, e, f
- La condicin ( a>b OR (c=d AND e<f) ) equivale a
( a>b OR c=d ) AND ( a>b OR e<f )
puesto que OR es distributivo respecto de AND
8.3 Reglas de transformacin de expresiones
Reglas generales de transformacin (7)
Toda expresin condicional
puede transformarse en su
Forma Normal
Conjuntiva (FNC)
27
Tema 8. Procesamiento y optimizacin de consultas
Forma normal conjuntiva
Una expresin en FNC tiene la forma
C
1
AND C
2
AND ... C
n

donde cada C
i
no incluye ningn AND
- Es TRUE si todo C
i
es TRUE, y es FALSE si algn C
i
es FALSE

Ventajas de la FNC
- Ya que AND es conmutativo, el Optimizador puede evaluar cada C
i

en cualquier orden (por ejemplo, en orden creciente en dificultad).
En cuanto un C
i
d FALSE, el proceso puede acabar
- En un entorno de procesamiento paralelo, sera posible evaluar
todos los C
i
a la vez. En cuanto uno diera FALSE, el proceso acabara
8.3 Reglas de transformacin de expresiones
Reglas generales de transformacin (y 8)
28
Tema 8. Procesamiento y optimizacin de consultas
Algunas buenas heursticas que pueden ser aplicadas durante
el procesamiento de consultas
1. Ejecutar operaciones de restriccin o tan pronto como
sea posible
2. Ejecutar primero las restricciones o ms restrictivas
(las que producen menor n de filas)
3. Combinar un producto cartesiano con una restriccin o
subsiguiente cuya condicin represente una condicin de reunin,
convirtindolas en un join
4. Ejecutar las operaciones de proyeccin t tan pronto como
sea posible
8.3 Reglas de transformacin de expresiones
Reglas heursticas
29
Tema 8. Procesamiento y optimizacin de consultas
Las tcnicas para realizar una reunin pueden ser las siguientes:
1. Fuerza Bruta
2. Bsqueda por ndice
3. Bsqueda Hash
4. Mezcla
5. Hash
6. Combinaciones de las anteriores

Daremos alguna indicacin del clculo del coste, en trminos de
nmero de accesos a bloques de disco
8.4 Implementacin de operac. relacionales
Implementacin de la reunin (JOIN)
30
Tema 8. Procesamiento y optimizacin de consultas
Por simplicidad y claridad, los algoritmos han sido codificados
con los siguientes supuestos:
La tabla R tiene m filas y la tabla S tiene n filas en total.
La columna de reunin es simple, se llama C, y se denomina
igual en ambas tablas.
Se considera que las filas de cierta tabla estn almacenadas en
un array con igual nombre que la tabla.
Cada fila est contenida en una posicin del array.
La reunin de dos filas se expresa mediante el producto de dichas
filas (operador * entre posiciones del array).
8.4 Implementacin de operac. relacionales
Implementacin de la reunin (JOIN)
31
Tema 8. Procesamiento y optimizacin de consultas
Examinar todas las posibles combinaciones de filas de R y S
Para cada fila de R, obtener todas las de S y probar si satisfacen la condicin de
reunin
for ( i = 1 ; i s m ; i++ )
for ( j = 1 ; j s n ; j++ )
if ( R[ i ].C == S[ j ].C ) aadir la fila reunida R[ i ] * S[ j ] al resultado;

Clculo del coste
1. Operaciones de lectura de filas = m * n
2. Operaciones de escritura de filas = cardinalidad del join resultado
2.a Caso de join uno-a-muchos (es decir, clave candidata / clave externa)
cardinalidad del join resultado = cardinalidad de la tabla con la clave externa (m n)
2.b Caso de join muchos-a-muchos
Sea dCR = n valores distintos de la columna de reunin C en la tabla R y
dCS = n valores distintos de la columna de reunin C en la tabla S
(estimacin suponiendo una distribucin uniforme de los valores de la columna C)
Dos puntos de vista: (ver transparencia siguiente)
8.4 Implementacin de operac. relacionales
Implementacin de JOIN por fuerza bruta
32
Tema 8. Procesamiento y optimizacin de consultas
a. Para cada fila de R habr filas de S con el mismo valor de C,
n total de filas en el join = (a)

b. Para cada fila de S habr filas de R con el mismo valor de C
n total de filas en el join = (b)

Si dCS = dCR, las estimaciones (a) y (b) son diferentes
Existe algn valor de C que ocurra en R pero no en S, o viceversa
Cardinalidad del join resultado = menor estimador

En la prctica interesa el acceso L/E a bloques (no a filas)
Sea bS (y bR) el n filas de S (o R) en un bloque
R ocupa bloques y S ocupa bloques de disco
Lecturas de bloques: ejemplo con m=100, n=10.000, bR=1 y bS=10

R exterior, S interior


S exterior, R interior

Conviene que la tabla del bucle exterior sea la menor (la q ocupa menos bloques)
dCS
n
dCS
m n*
dCR
m
dCR
n m*
bR
m
bS
n
bS
n m
bR
m *
+
bR
n m
bS
n *
+
8.4 Implementacin de operac. relacionales
Implementacin de JOIN por fuerza bruta (y 2)
33
Tema 8. Procesamiento y optimizacin de consultas
Existe un ndice X sobre la columna S.C de la tabla interior S
for ( i = 1 ; i s m ; i++ ) /* bucle exterior */
/* existen k entradas de ndice X[1] .. X[k]
con el valor de la columna indexada igual a R[ i ].C */
for ( j = 1 ; j s k ; j++ ) /* bucle interior */
/* sea S[ j ] la fila de S indexada por X[ j ] */
aadir la fila reunida R[ i ] * S[ j ] al resultado;

Ventaja sobre la fuerza bruta: acceso directo (va ndice) a las filas de S
relacionadas con cada fila de R
- N total de filas ledas de R y S = cardinalidad del resultado
- peor de los casos: cada fila leda de S est en un bloque diferente del disco
- N total de bloques ledos =
- Si m=100, n=10.000, bR=1, bS=10 y dCS=100, el total de bloques ledos es 10.100
8.4 Implementacin de operac. relacionales
Implementacin de JOIN por bsqueda por ndice
dCS
n m
bR
m *
+
34
Tema 8. Procesamiento y optimizacin de consultas
Adems, si las filas de S se almacenan en secuencia ordenada segn valor
de la columna de reunin C,
las lecturas de bloque se reducen a

ventaja de mantener almacenadas las relaciones en una buena secuencia fsica

Sobrecarga por el acceso al ndice X:
- Peor caso: cada fila de R necesita una bsqueda completa en X para encontrar las
filas correspondientes en S lectura de 1 bloque en cada nivel de X
- Si X tiene L niveles, son m * L lecturas extras de bloques
- En la prctica L s 3 y el nivel superior de X reside en Memoria Principal (menos
lecturas)

200
) * (
= +
bS
dCS n m
bR
m
8.4 Implementacin de operac. relacionales
Implementacin de JOIN por bsqueda por ndice (y 2)
35
Tema 8. Procesamiento y optimizacin de consultas
8.4 Implementacin de operac. relacionales
Implementacin de JOIN por bsqueda hashing
La organizacin primaria de S es direccionamiento directo, es decir, las
filas de S estn almacenadas en un fichero organizado segn la tcnica hashing
(aunque en el algoritmo se representa como un array)
El algoritmo es similar a la bsqueda por ndice, pero el camino de acceso a S
segn la columna de reunin S.C es una tabla hash y no un ndice

/*supuesta una tabla hash H sobre S.C*/
for (i = 1 ; i s m ; i++) { /*bucle exterior*/
k= hash( R[ i ].C ); /* existen h filas S[1] .. S[h] almacenadas en H[ k ] */
for (j = 1 ; j s h ; j++) /*bucle interior*/
if ( S[ j ].C == R[ i ].C )
aadir la fila reunida R[ i ] * S[ j ] al resultado;
}
36
Tema 8. Procesamiento y optimizacin de consultas
Considera R y S almacenadas en orden segn valores de la columna de reunin C
- Ambas pueden examinarse segn el orden fsico y de forma sincronizada
- El JOIN completo puede realizarse en una nica pasada sobre los datos
Tcnica ptima
Cada bloque se toca una sola vez (join uno-a-muchos)
N bloques ledos

/* supuesto un JOIN muchos-a-muchos */
r = s = 1;
while ( rsm && ssn ) { /*bucle exterior*/
v = R[ r ].C;
for ( j = s ; S[ j ].C < v ; j++ ) ;
s = j;
for ( j = s ; S[ j ].C == v ; j++ ) /*bucle interior principal*/
for ( i=r ; R[ i ].C == v ) aadir la fila reunida R[ i ] * S[ j ] al resultado;
s = j;
for ( i = r ; R[ i ].C == v ; i++ ) ;
r = i; }
bS
n
bR
m
+
8.4 Implementacin de operac. relacionales
Implementacin de JOIN por mezcla
Factor crtico del rendimiento:
Agrupamiento fsico de datos relacionados
lgicamente (ficheros ordenados)
En ausencia del agrupamiento, ordenar una
o ambas relaciones en tiempo de
ejecucin y mezclarlas (agrupamiento
dinmico: tcnica sort/merge)
37
Tema 8. Procesamiento y optimizacin de consultas
Necesita una nica pasada sobre los datos de cada tabla

1
er
Paso: Construir tabla hash H para S sobre S.C
Cada entrada de H contiene:
- Valor de S.C y (opcional) valores de otras columnas de S
- Puntero a la fila correspondiente
2 Paso: Examinar R y aplicar la misma funcin hash sobre R.C
Si una fila de R colisiona en H con filas de S, entonces
si S.C = R.C, se generan las filas reunidas adecuadas

Ventaja sobre la tcnica de mezcla:
- Las relaciones R y S no tienen por qu estar almacenadas en ningn orden,
- tampoco es necesario ordenarlas dinmicamente
8.4 Implementacin de operac. relacionales
Implementacin de JOIN por hash
38
Tema 8. Procesamiento y optimizacin de consultas
/* construir una tabla hash H sobre S.C */
for ( j = 1 ; j s n ; j++ ) {
k = hash ( S[ j ].C ) ;
aadir S[ j ].C /* y quiz algn valor de columna ms */
y un puntero a la fila S[ j ]
a la entrada H[ k ] de tabla hash ;
}
/* bsqueda hashing sobre R */
for ( i = 1 ; i s m ; i++ ) {
k= hash ( R[ i ].C ); /* existen h filas S[ 1 ] .. S[ h ] en H[ k ] */
for ( j = 1 ; j s h ; j++ )
if ( S[ j ].C == R[ i ].C )
aadir la fila reunida R[ i ] * S[ j ] al resultado;
}
8.4 Implementacin de operac. relacionales
Implementacin de JOIN por hash (y 2)
39
Tema 8. Procesamiento y optimizacin de consultas
Enfoque diferente que puede combinarse con los que hemos visto

Transformacin semntica: la que slo es vlida debido a
cierta restriccin de integridad (de tipo cualquiera, no slo R.I.
Referencial)
Optimizacin semntica: proceso de transformar una
consulta en otra equivalente (cualitativamente diferente pero
que garantiza el mismo resultado) y ms eficiente, gracias a que
los datos satisfacen restricciones de integridad especificadas
sobre el esquema de base de datos

Con la aparicin de las bases de datos de conocimiento y los
sistemas expertos, es posible que esta tcnica se incorpore a los
SGBD futuros
Anexo. Otros enfoques de la optimizacin
Optimizacin semntica
40
Tema 8. Procesamiento y optimizacin de consultas
Ejemplo:
Obtener los nss de los empleados que trabajan en algn proyecto
SELECT nss
FROM EMPLEADO, TRABAJA_EN
WHERE nss=nsse;
t
nss
(EMPLEADO
nss=nsse
TRABAJA_EN)

El JOIN hace corresponder una clave externa (nsse en TRABAJA_EN, que es NOT
NULL, por ser parte de la PK) con su correspondiente clave candidata (nss en
EMPLEADO),
Cada fila de TRABAJA_EN siempre tiene como contrapartida alguna de
EMPLEADO,
as que cada fila de TRABAJA_EN contribuye con un valor de nsse al resultado
global,
Para el resultado no se pide ninguna columna que slo est en EMPLEADO.
Anexo. Otros enfoques de la optimizacin
Optimizacin semntica (2)
41
Tema 8. Procesamiento y optimizacin de consultas

No se necesita el JOIN !! y la consulta anterior equivale a:

SELECT DISTINCT nss
FROM TRABAJA_EN ;
t
nsse
(TRABAJA_EN)

Transformacin vlida slo por la semntica de la situacin
Cada fila de TRABAJA_EN corresponde a una fila en EMPLEADO, debido a la
restriccin de integridad referencial y a la de entidad
En general, cada operando de un JOIN contiene filas sin contrapartida en el
otro operando y por tanto, que no contribuyen al resultado;
en estos casos, transformaciones como la del ejemplo no son vlidas
Anexo. Otros enfoques de la optimizacin
Optimizacin semntica (y 3)

También podría gustarte