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)