Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porRaúl Núñez Silva Modificado hace 8 años
1
Caso de Estudio Relación PROFESOR(id, nom, deptid) - 200 páginas, 1000 filas (5 filas/página) - 50 deps 20 profesores/dep en promedio - Índices: Clustered B+ sobre deptid Hash sobre id -Peso de id: 1 (de hecho id es la CP) -nom no es CA
2
Caso de Estudio Relación CUR_PROF(profid, crscod, semestre) - 1000 páginas, 10000 filas (10 filas/página) - La relación abarca 4 semestres 2500 filas/semestre - Índices: Clustered B+ sobre semestre Hash sobre profid - Peso de profid: 10 (10 filas por profesor en CUR_PROF) CF hacia PROFESOR
3
Caso de Estudio Sea la consulta: SELECT DISTINCT P.id, P.nom FROM profesor AS P, cur_prof AS C WHERE P.id = C.profid AND C.semestre = 'F2015' AND P.deptid = 'CS'; Condición de join Selecciones Proyección Nota: En los ejemplos que siguen se hace caso omiso del ordenamiento que usualmente conlleva una operación DISTINCT.
4
Caso de Estudio Sean las expresiones algebraicas equivalentes a la consulta anterior: a) id,nom ( deptid = ‘CS’ semestre = ‘F2015’ (PROFESOR ⋈ id = profid CUR_PROF)) b) id,nom ( deptid = ‘CS’ (PROFESOR) ⋈ id = profid semestre = ‘F2015’ (CUR_PROF)) c) id,nom ( semestre = ‘F2015’ ( deptid = ‘CS’ (PROFESOR) ⋈ id = profid CUR_PROF)) d) id,nom ( deptid = ‘CS’ (PROFESOR ⋈ id = profid semestre = ‘F2015’ (CUR_PROF)))
5
PROFESORCUR_PROF ⋈ id = profid deptid = ‘CS’ semestre = ‘F2015’ id,nom PROFESOR CUR_PROF ⋈ id = profid deptid = ‘CS’ id,nom semestre = ‘F2015’ a) b) Árboles para los planes de ejecución
6
PROFESORCUR_PROF ⋈ id = profid deptid = ‘CS’ id,nom semestre = ‘F2015’ PROFESORCUR_PROF ⋈ id = profid deptid = ‘CS’ id,nom semestre = ‘F2015’ c) d) Árboles para los planes de ejecución
7
Caso de Estudio a) Supóngase una memoria (M) de 52 páginas. Costo del join con block nested: F PROFESOR + F CUR_PROF * F PROFESOR /(M-2) = 200 + 1000 * 200/(52-2) = 4200 (páginas) El resultado del join serán 10000 filas, aproximadamente 3000 páginas (ya que cada fila de PROFESOR es el doble del tamaño de cada fila de CUR_PROF)
8
Caso de Estudio El costo de escribir el resultado de la selección y de la proyección, proceso que se hace conjuntamente (pipelining) con el join, es: ( x 3000) donde es un factor* entre 0 y 1 que indica el total de páginas resultantes. Este costo es el mismo para todos los planes. * Factor de reducción debido a la restricción y proyección finales.
9
Caso de Estudio b) Con block nested: Primero se hacen las selecciones: -Dado que hay 1000 profesores en 50 departamentos, el tamaño de deptid = ‘CS’ (PROFESOR) es 20 filas, o sea, 4 páginas -Como el peso de semestre en CUR_PROF es 2500, entonces el tamaño de semestre = ‘F2015’ (CUR_PROF) es 250 páginas
10
Caso de Estudio -Costo de las selecciones: como en ambas relaciones hay índice clustered B+ sobre deptid y semestre respectivamente, el costo total de las selecciones es: 2 + 2 + 4 + 250 = 258 Acceso índice de PROFESOR Acceso índice de CUR_PROF Páginas resultantes de PROFESOR Páginas resultantes de CUR_PROF
11
Caso de Estudio Como la relación deptid = ‘CS’ (PROFESOR) es tan pequeña, se puede mantener en memoria y a medida que se va generando la la relación semestre = ‘F2015’ (CUR_PROF) se va haciendo el join; por lo tanto, no se requieren accesos adicionales: Costo total: 258 (páginas)
12
Caso de Estudio c) Se hace la selección sobre PROFESOR usando el índice clustered sobre deptid, esto genera una relación de 4 páginas (20 filas) que cabe en memoria como en el caso b), el costo es: 2 + 4 = 6 Acceso índice de PROFESOR Páginas resultantes de PROFESOR
13
Caso de Estudio Para aprovechar el índice unclustered sobre profid en CUR_PROF se usará en este caso un index nested. La selección anterior genera 20 filas; cada una se espera haga join con 10 filas en promedio de CUR_PROF. Por lo tanto, se requiere: - 1.2 accesos: costo de búsqueda de cada profesor en el índice sobre profid en CUR_PROF - 10 accesos adicionales por cada fila de PROFESOR dado que el índice es unclustered. O sea:
14
Caso de Estudio Costo join: (1.2) * (20) = 24 (10) * (20) = 200 224 Costo total: 6 + 224 = 230 (páginas) Costo de usar el índice Páginas leídas de CUR_PROF
15
Caso de Estudio d) Primero la selección sobre CUR_PROF: El costo de semestre = ‘F2015’ (CUR_PROF) es: 2 + 250 = 252 páginas como en el caso b) y desde ya (y solo con esta selección inicial) pierde con el caso c)… Acceso índice de CUR_PROF Páginas resultantes de CUR_PROF
16
Caso de Estudio Conclusión: En este caso la mejor opción fue la c) pero habría que evaluar otras alternativas (sort merge join, hash join, etc.) en general en cada una de las opciones…
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.