Procesamiento de consultas Database System Concepts, 5th Ed. ©Silberschatz, Korth and Sudarshan See www.db-book.com for conditions on re-use Procesamiento de consultas Visión general Medidas del coste de una consulta Operación selección Ordenación Operación reunión Otras operaciones Evaluación de expresiones Database System Concepts - 5th Edition, Aug 27, 2005. 13.2 ©Silberschatz, Korth and Sudarshan Pasos básicos para el procesamiento de consultas 1. Análisis y traducción 2. Optimización 3. Evaluación Database System Concepts - 5th Edition, Aug 27, 2005. 13.3 ©Silberschatz, Korth and Sudarshan Pasos básicos para el procesamiento de consultas (Cont.) Análisis y transformación Traducción de la consulta a su formato interno. Posteriormente se construye un árbol para el análisis de la consulta, que se transformara en una expresión del algebra relacional. El analizador comprueba la sintaxis de la consulta, verifica nombres de relaciones de la BD. Evaluación El motor de evaluación elije un plan de la consulta, se evalúa y ejecuta el plan, y se muestra el resultado de la consulta. Database System Concepts - 5th Edition, Aug 27, 2005. 13.4 ©Silberschatz, Korth and Sudarshan Pasos básicos para el procesamiento de consultas: Optimización Una expresión del álgebra relacional puede tener muchas expresiones equivalentes: select saldo from cuenta where saldo < 2500 Ejm., saldo2500(saldo(Cuenta)) es equivalente a saldo(saldo2500(Cuenta)) Se puede ejecutar cada operación del álgebra relacional utilizando alguno de los diferentes algoritmos. En consecuencia, una expresión del álgebra relacional se puede evaluar de muchas maneras. Las anotaciones de las expresiones que especifican los detalles de la estrategia de evaluación se denomina plan de evaluación. Ejm., Puede usar un índice sobre saldo para encontrar las cuentas con saldo < 2500 O podemos realizar un completo escaneo y descartar cuentas con saldo 2500 Database System Concepts - 5th Edition, Aug 27, 2005. 13.5 ©Silberschatz, Korth and Sudarshan Pasos básicos para el procesamiento de consultas: Optimización (Cont.) Optimización de consultas: Entre todos los planes de evaluación equivalente elegir el de menor costo. El Costo se calcula utilizando la información estadística en el catálogo de la base de datos. Ejm. número de tuplas de cada relación, el tamaño de las tuplas, etc. Temas a estudiar: ¿Cómo medir los costos de los algoritmos de consulta para evaluar las operaciones de álgebra relacional ¿Cómo combinar los algoritmos de las operaciones individuales a fin de evaluar una expresión completa Database System Concepts - 5th Edition, Aug 27, 2005. 13.6 ©Silberschatz, Korth and Sudarshan Medidas del coste de una consulta El costo es generalmente medido como el tiempo total transcurrido para responder a la consulta Muchos factores contribuyen al costo del tiempo Accesos a disco, CPU, o eventos de comunicación en Red. Generalmente el acceso a disco predomina en el costo, y es relativamente fácil de estimar. Se mide tomando en cuenta: Numero de búsquedas Numero de bloques leídos Numero de bloques escritos * Promedio del costo de bloques escritos * Promedio del costo de búsqueda * Promedio del costo de bloques leídos Costo para escribir un bloque es mayor que el costo para leer un bloque – los datos se leen de nuevo después de haber sido escrito para asegurarse de que la escritura fue un éxito Database System Concepts - 5th Edition, Aug 27, 2005. 13.7 ©Silberschatz, Korth and Sudarshan Medidas del coste de una consulta (Cont.) Para simplificar, sólo tiene que utilizar el número de transferencias de bloques de disco y el número de búsquedas como las medidas de coste. tT – tiempo para la transferencia de un bloque tS – tiempo para una búsqueda (tiempo de búsqueda en el disco mas latencia rotacional) Costo b transferencias de bloques, más S búsquedas: b * tT + S * t S No se considera el costo de CPU En Sistemas reales se toma en cuenta el costo de CPU Las estimaciones de coste que se proporcionan ignoran el coste de escribir el resultado final de una operación en disco Varios algoritmos puede recudir E/S a disco utilizando un espacio extra de buffer. La cantidad de memoria disponible en el buffer depende de tareas concurrentes y procesos de SO, conocidos durante la ejecución. Frecuentemente asumimos la mínima cantidad de memoria disponible para la operación. Aunque se asuma que los datos se deben leer inicialmente de disco, es posible que el bloque al que se acceda puede estar en la memoria intermedia. Database System Concepts - 5th Edition, Aug 27, 2005. 13.8 ©Silberschatz, Korth and Sudarshan Operación de Selección explorador de archivo– es el operador de nivel más bajo para acceder a los datos. Los exploradores de archivo son algoritmos de búsqueda que localizan y recuperan los registros que cumplen una condición de selección. Algoritmo A1 (Búsqueda lineal). se explora cada bloque del archivo y se comprueban todos los registros para ver si satisfacen la condición de selección. Costo estimado = br transferencias de bloques + 1 búsqueda. br numero de bloques que contienen a los registros de la relación r Las selecciones sobre atributos clave tienen un coste medio de: coste = (br /2) transferencias de bloque + 1 búsqueda Búsqueda lineal se puede aplicar independientemente de la: La condición de selección El orden de los registros en el archivo Disponibilidad de índices Database System Concepts - 5th Edition, Aug 27, 2005. 13.9 ©Silberschatz, Korth and Sudarshan Operación de Selección (Cont.) A2 (búsqueda binaria). Aplicable si el archivo está ordenado según un atributo y la condición de la selección es una comparación de igualdad en ese atributo. Supongamos que los bloques de una relación se almacenan de forma contigua Estimación de costos (número de bloques de disco a escanear): Costo de la localización de la primera tupla por búsqueda binaria sobre los bloques: – log2(br) * (tT + tS) Si la selección no es sobre un atributo clave, más de un bloque puede contener los registros requeridos, y el coste de la lectura de los bloques extra se debe añadir a la estimación del coste. Se puede estimar este número mediante la estimación del tamaño del resultado de la selección Database System Concepts - 5th Edition, Aug 27, 2005. 13.10 ©Silberschatz, Korth and Sudarshan Selección usando Índices Las estructuras índice se denominan caminos de acceso, ya que proporcionan un camino a través del cual se pueden localizar y acceder a los datos. Los algoritmos de búsqueda que utilizan un índice reciben el nombre de exploraciones del índice. Aunque los índices pueden proporcionar un acceso rápido, directo y ordenado, su utilización implica un gasto adicional en los accesos a los bloques que contienen el índice. Database System Concepts - 5th Edition, Aug 27, 2005. 13.11 ©Silberschatz, Korth and Sudarshan Selección usando Índices A3 (Índice primario, igualdad basada en la clave). Para una condición de igualdad en un atributo clave con un índice primario se puede utilizar el índice para recuperar el único registro que satisface la correspondiente condición de igualdad. Si se usa un árbol B+, el coste de la operación en términos de operaciones E/S es igual a la altura del árbol más una operación E/S para recuperar el registro. Costo = (hi + 1) * (tT + tS) A4 (Índice primario, igualdad basada en un atributo no clave) Recupera múltiples registros. Estos registros estarían almacenados consecutivamente en el archivo , costo similar a A3 Database System Concepts - 5th Edition, Aug 27, 2005. 13.12 ©Silberschatz, Korth and Sudarshan Selección usando Índices (Cont.) A5 (índice secundario, igualdad). Esta estrategia puede recuperar un único registro si la condición de igualdad es sobre una clave; puede que se recuperen varios registros si el campo índice no es clave. En el primer caso sólo se obtiene un registro, y el coste es igual a la altura del árbol más una operación E/S para recuperar el registro. En el segundo caso, cada registro puede residir en un bloque diferente, que puede resultar en una operación E/S por cada registro recuperado. El coste podría llegar a ser incluso peor que el de la búsqueda lineal si se obtiene un gran número de registros. Recupera un simple registro si la clave de búsqueda es una clave candidata Costo = (hi + 1) * (tT + tS) Recupera múltiples registros si la clave de búsqueda no es una clave candidata. Cada uno de los n registros similares pueden estar en diferentes bloques. Costo = (hi + n) * (tT + tS) Puede ser muy caro! Database System Concepts - 5th Edition, Aug 27, 2005. 13.13 ©Silberschatz, Korth and Sudarshan Selecciones con condiciones de comparación Considérese una selección de la forma AV (r) o A V(r), Se puede implementar utilizando búsqueda lineal o binaria o con índices de alguna de las siguientes maneras: A6 (Índice primario, comparación). (La Relación es ordenada sobre A) Para A V(r) utilizar el índice para encontrar primera tupla v y escanear relación secuencialmente a partir de ahí. Para AV (r) solo escanear la relación secuencialmente hasta primera tupla > v; no utilizar el índice. A7 (Índice secundario, comparación). Para A V(r) utilizar el índice para encontrar primera entrada de índice v y explorar el índice secuencialmente a partir de ahí, para encontrar los punteros a los registros. Para AV (r) sólo escanear páginas de hoja del índice encontrando los punteros a los registros, hasta la primera entrada > v En cualquier caso, recuperar registros que son apuntados. – Requiere una E/S para cada registro – La exploración lineal puede ser menos costoso. Database System Concepts - 5th Edition, Aug 27, 2005. 13.14 ©Silberschatz, Korth and Sudarshan Implementación de selecciones complejas Conjunción: 1 2. . . n(r) A8 (selección conjuntiva utilizando un índice). Selecciona una combinación de i y algoritmos A1 a A7 que da como resultado el menor coste para i (r). Pruebe otras condiciones en tupla después de obtenerlo en el buffer de memoria. A9 (selección conjuntiva utilizando un índice compuesto). Utilice índice apropiado compuesto (múltiples claves) si está disponible. A10 (selección conjuntiva mediante la intersección de identificadores). Requiere índices con punteros de registros. El uso del índice correspondiente para cada condición, y tomar la intersección de todos los conjuntos obtenidos del punteros de registros. Luego recuperar los registros de archivo Si algunas condiciones no tienen índices adecuados, aplicar la prueba en la memoria. Database System Concepts - 5th Edition, Aug 27, 2005. 13.15 ©Silberschatz, Korth and Sudarshan Implementación de selecciones complejas Disyunción:1 2 . . . n (r). A11 (selección disyuntiva mediante la unión de identificadores). Aplicable si todas las condiciones tienen índices disponibles. Caso contrario, utilice barrido lineal. El uso del índice correspondiente para cada condición, y tomar la unión de todos los conjuntos obtenidos del punteros de registros. Luego recuperar los registros de archivo Negation: (r) Utilice exploración lineal en el archivo Si muy pocos registros cumplen , y un índice es aplicable a Buscar la satisfacción de los registros con índice y recuperar desde un archivo Database System Concepts - 5th Edition, Aug 27, 2005. 13.16 ©Silberschatz, Korth and Sudarshan Ordenación Se puede conseguir la ordenación mediante la construcción de un índice en la clave de ordenación y utilizando luego ese índice para leer la relación de manera ordenada. Este proceso ordena la relación sólo lógicamente a través de un índice, en lugar de físicamente. Por esta razón sería deseable ordenar las tuplas físicamente. La ordenación de relaciones que no caben en memoria se llama ordenación externa. Database System Concepts - 5th Edition, Aug 27, 2005. 13.17 ©Silberschatz, Korth and Sudarshan Algoritmo de ordenación-mezcla externa La técnica más utilizada para la ordenación externa es normalmente el algoritmo de ordenación-mezcla externa. Sea M el número de marcos de página en la memoria intermedia de la memoria principal (el número de bloques de disco cuyos contenidos se pueden alojar en la memoria intermedia de la memoria principal). Database System Concepts - 5th Edition, Aug 27, 2005. 13.18 ©Silberschatz, Korth and Sudarshan Algoritmo de ordenación-mezcla externa Primera etapa Se crean varias secuencias ordenadas. i=0 repeat leer M bloques o bien de la relación o bien del resto de la relación según el que tenga menor número de bloques; ordenar la parte en memoria de la relación; escribir los datos ordenados al archivo de secuencias Si; i=i+1; until el final de la relación Database System Concepts - 5th Edition, Aug 27, 2005. 13.19 ©Silberschatz, Korth and Sudarshan Algoritmo de ordenación-mezcla externa Segunda etapa Las secuencias se mezclan. Si se tienen N secuencias de tal forma que N<M Leer un bloque de cada uno de los N archivos Si, y guardarlos en una página de la memoria intermedia en memoria; repeat elegir la primera tupla (según el orden) de entre todas las páginas de la memoria intermedia: Escribir la tupla y suprimirla de la página de la memoria intermedia; if la página de la memoria intermedia de alguna secuencia Si está vacía and not fin_de_archivo(Si) then leer el siguiente bloque Si y guardarlo en la página de la memoria intermedia; until todas las páginas de la memoria intermedia estén vacías Database System Concepts - 5th Edition, Aug 27, 2005. 13.20 ©Silberschatz, Korth and Sudarshan Algoritmo de ordenación-mezcla externa casos y coste En el caso en que N>M, se realiza la operación de mezcla en varios ciclos, tomando como entrada de cada ciclo M-1 secuencias de bloques. Se ordena cada secuencia según el algoritmo anterior. Si al concluir el ciclo completo se tiene que N>M, se repiten estos ciclos tantas veces como sea necesario, hasta que el número de secuencias sea menor que M; momento en el que un último ciclo genera el resultado ordenado. El número total de bloques transferidos en una ordenacion de mescla externa es: br ( 2 logM–1(br / M) + 1) Database System Concepts - 5th Edition, Aug 27, 2005. 13.21 ©Silberschatz, Korth and Sudarshan Ejemplo 22 Database System Concepts - 5th Edition, Aug 27, 2005. 13.22 ©Silberschatz, Korth and Sudarshan Operación reunión Existen varios algoritmos para implementar la reunión. Reunión en bucle anidado Reunión en bucle anidado por bloques Reunión en bucle anidado indexada Reunión por mezcla Reunión por asociación La elección es en función al costo calculado. En los ejemplos se utiliza la siguiente información: # de registros de cliente: ncliente = 10000. # de bloques de cliente: bcliente = 400. # de registros de impositor: nimpositor = 5000. # de bloques de impositor: bimpositor = 100. Database System Concepts - 5th Edition, Aug 27, 2005. 13.23 ©Silberschatz, Korth and Sudarshan Reunión en bucle anidado Calcular la reunión Zeta: r s for each tuple tr in r do begin for each tuple ts in s do begin comprobar que el par (tr,ts) satisface la condición de la reunión si la cumple, añadir tr • ts al resultado. end end r es llamado la relación externa y s la relación interna de la reunión. No requiere índices y se puede utilizar sin importar la condición de la reunión. Es costoso, ya que examina cada pareja de tuplas en las dos relaciones. Database System Concepts - 5th Edition, Aug 27, 2005. 13.24 ©Silberschatz, Korth and Sudarshan Reunión en bucle anidado (Cont.) En el peor de los casos, la memoria intermedia solamente puede contener un bloque de cada relación necesitándose un total de nr bs + br accesos a bloques En el mejor de los casos hay suficiente espacio para que las dos relaciones quepan en memoria intermedia, así que cada bloque se tendrá que leer solamente una sola vez. En consecuencia se necesitaría acceder a br + bs bloques Asumiendo el peor caso de disponibilidad de la memoria la estimación de costos es: Con impositor como relación externa: 5000 400 + 100 = 2,000,100 accesos a bloques, Con cliente como la relación externa 10000 100 + 400 = 1,000,400 accesos a bloques En la mejor de las situaciones, sin embargo, se tienen que leer ambas relaciones una sola vez y realizar el cálculo. El cálculo necesita a lo sumo 100+400=500 accesos a bloques. Es preferible la reunión en bucle anidado por bloques. Database System Concepts - 5th Edition, Aug 27, 2005. 13.25 ©Silberschatz, Korth and Sudarshan Reunión en bucle anidado por bloques Variante de la reunión de bucle anidado en la cual cada bloque de la relación interna es emparejada con cada bloque de la relación externa. for each block Br of r do begin for each block Bs of s do begin for each tuple tr in Br do begin for each tuple ts in Bs do begin Comprobar que el para (tr,ts) satisface la condición de la reunión si la cumple, añadir tr • ts al resultado. end end end end Database System Concepts - 5th Edition, Aug 27, 2005. 13.26 ©Silberschatz, Korth and Sudarshan Reunión en bucle anidado por bloques (Cont.) En el peor de los casos, cada bloque de la relación interna s se lee solamente una vez por cada bloque de la relación externa en lugar de una vez por cada tupla de la relación externa. De este modo, en el peor de los casos habrá un total de: br bs + br accesos a bloques. En el mejor de los casos habrá que acceder a br + bs. El rendimiento de los procedimientos de bucle anidado y bucle anidado por bloque se puede mejorar a un mas: En el bucle anidado por bloques, utilizar M — 2 bloques de disco como la unidad de bloque para la relación externa, donde M = tamaño en bloques de la memoria; utilizar los restantes dos bloques para almacenar los bloques de la relación interna y bloques de resultado o salida. Costo = br / (M-2) bs + br acceso a bloques Si los atributos de la reunión en una reunión natural o una equirreunión forman una clave de la relación interna, entonces el bucle interno puede finalizar tan pronto como se encuentre la primera correspondencia. Se puede explorar el bucle interno alternativamente hacia adelante y hacia atrás. Este método de búsqueda ordena las peticiones de bloques de disco de tal manera que los datos restantes en la memoria intermedia de la búsqueda anterior se reutilizan. Utilizar un índice sobre la relación interna. Database System Concepts - 5th Edition, Aug 27, 2005. 13.27 ©Silberschatz, Korth and Sudarshan Reunión en bucle anidado indexado Búsquedas en Índices pueden reemplazar a la exploración de archivos sí: La Reunión es una equireunión o una reunión natural y Esta disponible un índice sobre el atributo de la reunión en la relación interna Puede construirse un índice exclusivamente para el calculo de la reunión. Para cada tupla tr de la relación externa r, se utiliza el índice para buscar tuplas en s que cumplan la condición de reunión con la tupla tr. En el peor de los casos solo hay espacio en la memoria intermedia para una página de r y una página del índice. Para cada tupla de r, se realiza una búsqueda en el índice de s. Costo de la reunión: br + nr c Donde c es el costo de una única selección en s utilizando la condición de la reunión. Ya se vio como estimar el coste del algoritmo de una única selección cuyo calculo es proporcional a c . Si hay índices disponibles en ambas relaciones r y s, normalmente es mas eficiente usar como relación más externa aquella que tenga menos tuplas. Database System Concepts - 5th Edition, Aug 27, 2005. 13.28 ©Silberschatz, Korth and Sudarshan Ejemplo en el costo de una Reunión en bucle anidado indexado Evaluar impositor cliente, con impositor como la relación externa. Si cliente tiene un índice primario de árbol B+ en el atributo de la reunión nombre_cliente, que contiene 20 entradas en promedio por cada nodo del índice. Suponga que cliente tiene 10000 tuplas, la atura del árbol es 4, y será necesario un acceso más para encontrar el dato real. impositor tiene 5000 tuplas El costo total para una reunión en bucle anidado por bloques: 400*100 + 100 = 40,100 accesos a bloques Asumiendo el peor caso de la memoria Puede ser significativamente menor cuando hay mas memoria Costo para una reunión en bucle anidado indexado 100 + 5000 * 5 = 25,100 acceso a bloques. Database System Concepts - 5th Edition, Aug 27, 2005. 13.29 ©Silberschatz, Korth and Sudarshan Reunión por mezcla 1. Ordenar ambas relaciones en el atributo de la reunión (Si aun no estan ordenadas en el atributo de la reunión). 2. Mezclar las relaciones ordenadas para la reunión de ellos. 1. Su reunión se puede calcular mediante un proceso muy parecido a la etapa de mezcla del algoritmo de ordenación-mezcla. 2. La principal diferencia es el manejo de valores duplicados en el atributo de la reunión. Database System Concepts - 5th Edition, Aug 27, 2005. 13.30 ©Silberschatz, Korth and Sudarshan Reunión por mezcla (Cont.) Cada bloque tiene que ser leído sólo una vez () Dado que las relaciones están ordenadas, las tuplas con el mismo valor en los atributos de la reunión aparecerán consecutivamente. De este modo solamente es necesario leer cada tupla en el orden una vez y, como resultado, leer también cada bloque solamente una vez. Puesto que sólo se hace un ciclo en ambos archivos, el método de reunión por mezcla resulta eficiente; el número de accesos a bloques es igual a la suma de los bloques: br + bs. Database System Concepts - 5th Edition, Aug 27, 2005. 13.31 ©Silberschatz, Korth and Sudarshan Reunión por asociación Utilizado para equirreuniones y reuniones naturales. Se utiliza una función de asociación h para dividir las tuplas de ambas relaciones H es una función de asociación que asigna a los AtribsReunion los valores {0, 1, ..., n}, donde AtribsReunion denotan los atributos comunes de r y s utilizados en la reunión natural. Hr0, Hr1, . . ., Hrnh denotan las particiones de las tuplas de r, inicialmente todas vacías. Cada tupla tr r se pone en la partición Hri donde i = h(tr [AtribsReunion]). Hs0,, Hs1. . ., Hsnh denota las particiones de las tuplas de s, inicialmente todas vacías. Cada tupla ts s se pone en la partición si, donde i = h(ts [AtribsReunion]). La función de asociación h debería de tener las “buenas” propiedades y uniformidad que se estudiaron en la parte de índices asociados. Database System Concepts - 5th Edition, Aug 27, 2005. 13.32 ©Silberschatz, Korth and Sudarshan Reunión por asociación (Cont.) Database System Concepts - 5th Edition, Aug 27, 2005. 13.33 ©Silberschatz, Korth and Sudarshan Reunión por asociación (Cont.) Supóngase que una tupla de r y una tupla de s satisfacen la condición de la reunión; por tanto, tendrán el mismo valor en los atributos de la reunión. Si el valor se asocia con algún valor i, la tupla de r tiene que estar en Hri y la tupla de s en Hsi. De este modo solamente es necesario comparar las tuplas de r en Hri con las tuplas de s en Hsi; no es necesario compararlas con las tuplas de s de otra partición. El coste estimado para una reunión por asociación es: 3(br + bs) + 2nh Reunión por Asociación Híbrida: Se aplica en el caso de que la memoria sea grande pero que ninguna de las relaciones pueda caber en memoria. La idea es mantener las primeras particiones de la relación interna en memoria sin escribirlas a disco. Luego de particionar la relación externa se puede aprovechar los datos de la particiones en memoria para escribir el resultado, pudiéndose obviar las lecturas/escrituras de las primeras particiones de la relación externa. Database System Concepts - 5th Edition, Aug 27, 2005. 13.34 ©Silberschatz, Korth and Sudarshan Algoritmos de Join con operaciones complejas Condición Conjuntiva: r join 1 2... n s Se aplica uno de los algoritmos de bucles anidados, ó Computar el resultado para una condición r join i s Sobre el resultado se seleccionan las filas que cumplen con las demás condiciones 1 . . . i –1 i +1 . . . n Condición disyuntiva: r join1 2 ... n s Se aplica uno de los algoritmos de bucles anidados, ó Calcular cada operación individualmente y unir los resultados: (r join1 s) (r join2 s) . . . (r joinn s) Database System Concepts - 5th Edition, Aug 27, 2005. 13.35 ©Silberschatz, Korth and Sudarshan Join Externos Se calculan: Realizando una operación de Join interno con los algoritmos descritos y luego agregando las filas no reunidas de una o ambas relaciones complementadas con valores nulos. Modificando los algoritmos de Join interno. Para el join por mezcla, r left outer join s puede calcularse como: 1. Caculando r join s y unir su resultado al resultado de la operación ∏R (r join s) – r complementadas con valores nulos, ó 2. Modificando el algoritmo de reunión por mezcla: Durante la mezcla para las filas de r no reunidas añadirlas al resultado complementadas con valores nulos. Para el join por asociación, r left outer join s puede calcularse como: 1. Si r es la relación de prueba, añadirla al resultado sus filas complementadas al no encontrarse filas de s concordantes a través del índice de la partición. 2. Si r es la relación de construcción, se marca las entradas del índice no utilizadas para luego agregarlas complementadas al resultado. Database System Concepts - 5th Edition, Aug 27, 2005. 13.36 ©Silberschatz, Korth and Sudarshan Otras operaciones Eliminación de duplicados puede ser implementado vía ordenación o asociación. Las tuplas idénticas aparecerán consecutivas durante la ordenación, pudiéndose eliminar todas las copias menos una. Optimización: Con la ordenación-mezcla externa, se pueden eliminar los duplicados mientras se crea una secuencia antes de que ésta se escriba en el disco, reduciendo así el número de bloques transferidos. El resto de duplicados se pueden suprimir durante la etapa de reunión/mezcla, así que el resultado final estará libre de repeticiones Similar a la reunión por asociación – los duplicados estarán en los mismos cajones. Proyección: Se realiza la proyección en cada tupla Seguido de la eliminación de duplicados. Database System Concepts - 5th Edition, Aug 27, 2005. 13.37 ©Silberschatz, Korth and Sudarshan Otras operaciones : Agregación Agregación puede ser implementado de manera similar a la eliminación de duplicados. Ordenación o Asociación puede ser usado para llevar las tuplas a un mismo grupo, y luego aplicar la función de agregación a cada grupo. El coste estimado para la implementación de la operación agregación es el mismo coste de la eliminación de duplicados para las funciones de agregación como min, max, sum, count y avg Database System Concepts - 5th Edition, Aug 27, 2005. 13.38 ©Silberschatz, Korth and Sudarshan Otras operaciones : Operación sobre conjuntos Operación sobre conjuntos (, y ): puede utilizarse variantes de reunión por mezcla después la ordenación, o la variante de la reunión por asociación. Eejmplo, Operación de conjuntos usando reunión por asociación : 1. Particionar ambas relaciones utilizando la misma función hash 2. Procesar cada partición i como sigue: r s: 1. Construir un índice asociativo en memoria sobre Hri. 2. Añadir las tuplas de Hsi, al índice asociativo solamente si no estaban ya presentes. 3. Añadir las tuplas del índice asociativo al resultado. r s: 1. Construir un índice asociativo en memoria Hri 2. Para cada tupla en Hsi, probar el índice asociativo y pasar la tupla al resultado únicamente si ya estaba presente en el índice. r – s: 1. Construir un índice asociativo en memoria en Hri 2. Para cada tupla de Hsi probar el índice asociativo y, si la tupla está presente en el índice, suprimiendo del índice asociativo. 3. Añadir las tuplas restantes del índice asociativo al resultado. Database System Concepts - 5th Edition, Aug 27, 2005. 13.39 ©Silberschatz, Korth and Sudarshan Evaluación de expresiones Hasta aquí se ha estudiado cómo llevar a cabo operaciones relacionales individuales. Ahora se considera cómo evaluar una expresión que contiene varias operaciones. La manera evidente de evaluar una expresión es simplemente evaluar una operación a la vez en un orden apropiado. El resultado de cada evaluación se materializa en una relación temporal para su inmediata utilización. Un inconveniente de esta aproximación es la necesidad de construir relaciones temporales, que (a menos que sean pequeñas) se tienen que escribir en disco. Un enfoque alternativo es evaluar varias operaciones de manera simultánea en un cauce, con los resultados de una operación pasados a la siguiente, sin la necesidad de almacenar relaciones temporales. Database System Concepts - 5th Edition, Aug 27, 2005. 13.40 ©Silberschatz, Korth and Sudarshan Materialización Evaluación materializada: evaluar una operación a la vez, comenzando en el nivel más bajo. Utilizar los resultados intermedios materializado en las relaciones temporales para evaluar el próximo nivel de operaciones. Ejemplo, en base a la figura, se calcula y se almacena la operación balance2500 (account ) Luego se calcula la reunión de la operación almacenada con la relación customer, y finalmente calcular la proyección sobre customer-name. Database System Concepts - 5th Edition, Aug 27, 2005. 13.41 ©Silberschatz, Korth and Sudarshan Materialización (Cont.) El coste de una evaluación materializada no es simplemente la suma de los costes de las operaciones involucradas. Cuando se calcularon los costes estimados de los algoritmos se ignoró el coste de escribir el resultado de la operación en disco. Para calcular el coste de evaluar una expresión como la que se ha hecho hay que añadir los costes de todas las operaciones, incluyendo el coste de escribir los resultados intermedios en disco. La memoria intermedia doble (usando dos memorias intermedias, una donde progresa la ejecución del algoritmo mientras que la otra se está copiando) permite que el algoritmo se ejecute más rápidamente mediante la ejecución en paralelo de acciones en la CPU con acciones de E/S. Database System Concepts - 5th Edition, Aug 27, 2005. 13.42 ©Silberschatz, Korth and Sudarshan Encausamiento Evaluación encausada: Evalúa varias operaciones simultáneamente, pasando los resultados de una operación a la siguiente. Ejemplo, en el árbol de expresión previo, no se almacena el resultado de la operación balance 2500 (account ) En cambio, pasa tuplas directamente a la reunión.. Similarmente, no almacena el resultado de la reunión, pasa las tuplas directamente a la proyección. Mucho más barato que la materialización: no es necesario guardar una relación temporal en el disco. El encausamiento no siempre puede ser posible– Ejemplo, Ordenación y Reunión por asociación. Database System Concepts - 5th Edition, Aug 27, 2005. 13.43 ©Silberschatz, Korth and Sudarshan