Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Diseño de Bases de Datos
Laboratorios 3º y 4º Diseño físico con índices en SQL Server Introducción a Microsoft®VISIO®
2
Objetivos Ejecución de scripts con el analizador de consultas:
Examen del plan de ejecución. Forzar el uso de un índice determinado (with (index (...))). Estudio de índices interesantes: consulta simple, con and, con or, con join, con agregados y uso de vistas materializadas. VISIO: Dibujar diagramas. Extracción de diagramas desde BD. Creación de BD a partir de los diagramas. DBD Laboratorio 3º © A. Jaime 2005
3
Crear la BD Credit Inicia el servidor local de SQL Server con el administrador de servicios. Descarga la carpeta comprimida con los scripts de creación de la BD Credit. Ejecuta con doble click el fichero Install.bat de la carpeta anterior. Si hay algún problema lee los comentarios del fichero creabase.sql DBD Laboratorio 3º © A. Jaime 2005
4
Ejecutar Scripts con el analizador de consultas
Descarga en el escritorio los ficheros con scripts que se te facilitan. Inicia el analizador de consultas de SQL Server. Abre el primer script: (1) Indices consulta simple.sql Aparecen, entre otras, instrucciones SELECT. También comentarios (con “--”) Use credit abre la BD de nombre “credit”. Go ejecuta las instrucciones anteriores en lo que se llama un “batch” DBD Laboratorio 3º © A. Jaime 2005
5
Plan de ejecución Muestra los algoritmos usados para ejecutar las operación sobre la BD, por ejemplo, para SELECT. Consulta Mostrar Plan de Ejecución Selecciona el siguiente fragmento de script con el ratón: Pulsa el icono: (“ejecutar consulta (F5)”) set statistics io on use credit go SELECT LastName, FirstName, Phone_No FROM Member with (Index (0)) WHERE LastName LIKE '[S-Z]%' DBD Laboratorio 3º © A. Jaime 2005
6
Ver el plan de ejecución
Se ha forzado el uso del índice clustered (en este caso el de la clave primaria) con: FROM Member with (Index (0)) Pasando el cursor sobre cada icono del plan de ejecución se explica el paso realizado. En este caso se ha recorrido la tabla Member de manera secuencial (búsqueda lineal): Son registros Se han realizado 146 lecturas (accesos a bloque) DBD Laboratorio 3º © A. Jaime 2005
7
Conteo del nº de bloques en SQL Server
Ejecutando set statistics io on, volviendo a ejecutar la SELECT y mirando en la solapa “Mensajes” SQL Server usa mucha memoria para disponer de gran parte de la BD y reducir las transferencias desde/a disco (ver Ayuda Contenido Arquitectura de SQLServer Arquitectura del motor BD relacional Arquitectura de la E/S). Por eso se cuentan las lecturas lógicas (en memoria) y las físicas son pocas o ninguna (transferencias de bloque reales al disco). DBD Laboratorio 3º © A. Jaime 2005
8
Crear, modificar y borrar índices con el analizador de consultas
Se puede usar la herramienta: Herramientas Administrar índices También se pueden ejecutar instrucciones T-SQL: Para crear un índice: create index nombreÍndice on tabla(atributos) Para borrarlo: drop index tabla.nombreÍndice Para ver los índices de una tabla: exec sp_helpindex tabla DBD Laboratorio 3º © A. Jaime 2005
9
Índices en SQL Server Tabla sobre la que se define el índice
Hemos creado ya índices con el administrador corporativo: Si es o no campo clave Nombre del índice Atributos sobre los que se define el índice Si las filas quedarán ordenadas por ese atributo DBD Laboratorio 3º © A. Jaime 2005
10
Índices agrupados (clustered) y no agrupados en SQL Server
Información en: Ayuda Contenido Arquitectura de SQLServer Arquitectura de BD Componentes lógicos de una BD Índices de SQL Índices de las tablas Es posible crear tablas sin índices (heap o montón) Índices Clustered (primario o agrupación): las tuplas se mantienen ordenadas por el atributo del índice (pueden ser varios atributos). Sólo puede haber un índice clustered por tabla. Índices No clustered (secundario): Las tuplas NO están ordenadas. DBD Laboratorio 3º © A. Jaime 2005
11
Índices lógicos en SQL Server
a Las hojas de índices NO clustered (secundarios) tendrán: Si la tabla es heap o montón, punteros físicos a tupla (índice físico). Si hay índice clustered, valores del índice clustered en lugar de punteros (índice lógico) 2 a Juan 5 c c c Feli 2 5 a e c 8 e Ignacio 24 5 j f f f Luisa 9 9 9 f g 15 g g g Arantza 15 15 h Inés 16 h 16 h j 24 e j j Iker 8 24 m m Roberto 28 28 m Bloques de datos DBD Laboratorio 3º © A. Jaime 2005
12
Iconos del plan de ejecución: Clustered Index Scan
Bloques de datos a IP a 5 c c 2 Clustered Index Scan Recorrido secuencial de la tabla (ordenados por IP o IA) c e e 24 f f f 9 g g g 15 h 16 h j j j 8 m m 28 DBD Laboratorio 3º © A. Jaime 2005
13
Iconos del plan de ejecución: Index Scan
IS lógico a 2 a 5 c c c 2 5 Index Scan Recorrido de todas las hojas de un IS-c ó IS-nc a e c 5 9 8 e 24 j f f f 9 9 f g 15 g g 15 g 15 h 16 h 16 h j 24 e j j 8 24 m m 28 28 IP m Bloques de datos DBD Laboratorio 3º © A. Jaime 2005
14
Iconos del plan de ejecución: Index Seek
IS lógico a 2 a 5 c c c 2 5 Index Seek Busca desde la raíz a una hoja en IP, IA, IS-c ó IS-nc Puede recorrer varias hojas a partir de la encontrada a e c 8 e 24 5 j f f f 9 9 9 f g 15 g g g 15 15 h 16 h 16 h j 24 e j j 8 24 m m 28 28 IP m Bloques de datos DBD Laboratorio 3º © A. Jaime 2005
15
Iconos del plan de ejecución: Bookmark Lookup
IS lógico j g f a 2 IP c a 5 Bookmark Lookup Index Seek c 5 c 2 a 5 9 e 8 c j e 24 f f 9 f 9 f g 15 g Busca registros en el IP ó IA a partir de valores encontrados en un IS-c o IS-nc 15 g g 15 h 16 h 16 h Bookmark Lookup j 24 e 24 j j 8 m m 28 28 m Bloques de datos DBD Laboratorio 3º © A. Jaime 2005
16
Ver juntos varios planes de ejecución
Permite comparar resultados en una sola pantalla. Selecciona varios SELECT (sin go) y ejecútalos. En la siguiente página de la ayuda on-line se explican todos los iconos de los planes de ejecución: Ayuda Contenido Optimizar el rendimiento de la BD Optimizar consultas Analizar una consulta Mostrar gráficamente el plan de ... Estudia qué ha ocurrido en cada ejecución DBD Laboratorio 3º © A. Jaime 2005
17
Sin WITH en el FROM: resultado “óptimo”
Sin WITH en el FROM NO se fuerza al optimizador a elegir un índice concreto. Sin WITH, el optimizador usará la mejor opción entre las disponibles: la de menos lecturas lógicas Para que el optimizador disponga de opciones interesantes hay que aprender a crear índices que mejoren la ejecución de las consultas Esto último se conoce como diseño físico DBD Laboratorio 3º © A. Jaime 2005
18
Comparación consulta simple
Member_ident: IP(Member_No) 146 bloques Apellido: IS-nc(LastName) 7.109 bloques ApNomTfn: IS-nc(LastName, FirstName, Phone_No) 21 bloques NomApTfn: IS-nc(FirstName, LastName, Phone_No) 58 bloques DBD Laboratorio 3º © A. Jaime 2005
19
Índices interesantes para consultas simples
La mejor opción es un índice que permita resolver la consulta recorriendo SÓLO nodos del índice (sin visitar bloques de datos) Conviene que el índice incluya TODOS los atributos de WHERE seguidos de los de SELECT DBD Laboratorio 3º © A. Jaime 2005
20
Ejercicio: consulta simple
Elimina todos los índices de la tabla charge salvo el primario (charge_ident) Crea índices interesantes para la siguiente consulta: SELECT c.member_no,c.charge_no,c.charge_dt FROM charge as c WHERE c.member_no BETWEEN 6000 and 7000 ¿Puedes bajar de 26 lecturas lógicas? DBD Laboratorio 3º © A. Jaime 2005
21
Consultas con AND Abre el segundo script (el primero se cerrará automáticamente): (2)Indices para AND.sql Allí se analiza la siguiente consulta sobre la tabla Member: Sigue los pasos del script. Trata de entender qué ocurre en cada momento. Qué índice da mejores resultados y por qué SELECT m.Member_No, m.FirstName, m.Region_No FROM Member AS m WHERE m.FirstName LIKE 'K%' AND m.Region_No > 6 AND m.Member_No < 5000 DBD Laboratorio 3º © A. Jaime 2005
22
Iconos nuevos Filter Hash Match / Inner Join Conexión de varios a uno
DBD Laboratorio 3º © A. Jaime 2005
23
Comparación 1ª consulta con AND
Member_ident: IP(Member_No) 74 bloques Nombre: IS-nc(FirstName) 420 bloques Region: IS-nc(Region_no) 3.475 bloques Nombre+Region:IS-nc(FirstName) + IS-nc(Region_no) 11 bloques Region+Nombre: IS-nc(Region_no) + IS-nc(FirstName) NomReg: IS-nc(FirstName, Region_No) 3 bloques SELECT m.Member_No, m.FirstName, m.Region_No FROM dbo.Member AS m WHERE m.FirstName LIKE 'K%‘ AND m.Region_No>6 AND m.Member_No<5000 En este caso la mejor opción no es cubrir la consulta, porque la pregunta es poco selectiva y trae más cuenta usar el índice primario y resolver el resto de la consulta en memoria principal DBD Laboratorio 3º © A. Jaime 2005
24
Comparación 2ª consulta con AND
Member_ident: IP(Member_No) 74 bloques Nombre: IS-nc(FirstName) 420 bloques Region: IS-nc(Region_no) 3.475 bloques Nombre+Region:IS-nc(FirstName) + IS-nc(Region_no) 156 bloques Region+Nombre: IS-nc(Region_no) + IS-nc(FirstName) NomReg: IS-nc(FirstName, Region_No) 150 bloques SELECT m.Member_No, m.FirstName, m.Region_No, m.Phone_no FROM dbo.Member AS m WHERE m.FirstName LIKE 'K%‘ AND m.Region_No>6 AND m.Member_No<5000 En este caso la mejor opción no es cubrir la consulta, porque la pregunta es poco selectiva y trae más cuenta usar el índice primario y resolver el resto de la consulta en memoria principal DBD Laboratorio 3º © A. Jaime 2005
25
Índices interesantes para AND
Cada subcondición añadida con AND va limitando el resultado. Interesa empezar con un índice sobre una columna de WHERE que obtenga pocas tuplas (selectiva). Si hay un índice así, puede valernos. Si no, se intenta con varias columnas de WHERE que obtengan pocas tuplas. No tienen por qué ser todas. Si no hay nada selectivo probar a cubrir la consulta (todos los atributos de WHERE y SELECT) DBD Laboratorio 3º © A. Jaime 2005
26
Ejercicio: consulta con AND
Crea índices interesantes para la siguiente consulta: SELECT c.member_no,c.charge_no,c.charge_dt FROM charge as c WHERE c.member_no BETWEEN 6000 and 7000 AND c.provider_no BETWEEN 100 and 300 ¿Puedes bajar de 21 lecturas lógicas (no 33, sino 21)? DBD Laboratorio 3º © A. Jaime 2005
27
Consultas con OR Sesión 2
Abre el tercer script: (3)Indices para OR.sql Allí se analiza la siguiente consulta y otras similares (como el where mostrado a la dcha.): Sigue los pasos del script. Cuál de los índices da mejores resultados en cada caso y por qué SELECT m.LastName, m.FirstName, m.Region_No FROM Member AS m WHERE m.FirstName='Kimberly' OR m.LastName='Tripp' WHERE m.FirstName='Jeniffer' OR m.LastName='Widom' DBD Laboratorio 3º © A. Jaime 2005
28
Iconos nuevos Sort/Distinct Merge Join/Union Concatenation
DBD Laboratorio 3º © A. Jaime 2005
29
Comparación consulta con OR
Sólo presentamos aquí el caso de la consulta que obtiene todas las columnas, que devuelve más filas y contiene igualdades (“=“) en el WHERE: Con OR: NomApReg IS-nc(FirstName, LastName, Region_No) 43 bloques Con UNION: NomApReg y ApNomReg 10 bloques Con UNION ALL: NomApReg y ApNomReg DBD Laboratorio 3º © A. Jaime 2005
30
Índices interesantes para OR
Una fila forma parte del resultado si una subcondición cualquiera del WHERE es cierta OR es similar a UNIÓN: Si sirve una solución con UNIÓN (mejor UNION ALL) usarla. Si SELECT incluye un identificador de fila (como la clave primaria), entonces OR y UNIÓN son equivalentes. Si no, pueden dar soluciones diferentes. Interesa encontrar índices útiles para cada subconsulta del WHERE (de las unidas con OR) Si nada va bien podemos buscar índices interesantes para toda la condición del WHERE Ir probando hasta dar con una solución satisfactoria DBD Laboratorio 3º © A. Jaime 2005
31
Ejercicio: consulta con OR
Crea índices interesantes y, si es conveniente, transforma la siguiente consulta: SELECT c.charge_no, c.charge_amt, c.statement_no, c.charge_code FROM charge as c WHERE c.charge_amt > 5000 OR c.statement_no >= 30000 ¿Puedes bajar de 78 lecturas lógicas con or? ¿y de 4 con union? DBD Laboratorio 3º © A. Jaime 2005
32
Consultas con JOIN Abre el cuarto script: (4)Indices para Join.sql
Allí se analizan dos consultas con JOIN. Cada una utiliza un algoritmo diferente: Sigue los pasos del script. Qué índices dan mejores resultados en cada caso y por qué SELECT r.region_name, p.provider_name FROM region as r JOIN provider as p ON r.region_no=p.region_no SELECT s.statement_no, p.payment_no FROM statement as s JOIN payment as p ON s.member_no=p.member_no WHERE p.payment_amt between 1000 and 2000 DBD Laboratorio 3º © A. Jaime 2005
33
Icono nuevo Nested Loops / Inner Join Nested Loops / Inner Join
Representación de ciclo anidado (R1) Nested Loops / Inner Join Representación de ciclo único (R2) DBD Laboratorio 3º © A. Jaime 2005
34
Comparación consultas con JOIN
IS = índice secundario Comparación consultas con JOIN Region JOIN Provider: Sin IS: 1000Rg + 7Pr = 1007_bloques Con IS en extran./forán: 2Rg Pr = 1011_bloques Con IS que incluyen WHERE y SELECT: 1Rg + 19Pr = 20_bloques Statement JOIN payment: Sin IS: 170St + 29Py = 199_bloques Con IS en extran./forán: 1432St + 29Py = 1461_bloques Con IS que incluyen WHERE y SELECT: 1432St + 3Py = 1435 _bloques Sólo con IS en payment: 170St + 3Py = 173 _bloques DBD Laboratorio 3º © A. Jaime 2005
35
Índices interesantes para JOIN
Crear un índice para cada clave primaria y uno para cada clave foránea de los JOIN. Crear índices adecuados para la condición WHERE. Probar a crear un índice en cada tabla que incluya sus atributos de WHERE y JOIN. Crearlo en ambos órdenes (primero los de WHERE y primero los de JOIN). Probar a añadir a los últimos índices creados, además de los atributos de WHERE y JOIN, los de SELECT. Si hay más de un JOIN, analizar el que suponga mayor costo. Si no es suficiente estudiar el siguiente más costoso. Continuar estudiando JOIN hasta encontrar una solución satisfactoria. DBD Laboratorio 3º © A. Jaime 2005
36
Ejercicio: consulta con JOIN
Crea índices interesantes para la siguiente consulta: ¿Qué algoritmo utiliza? ¿Puedes bajar de un total de bloques (no )? SELECT m.member_no, c.category_no FROM member as m JOIN charge as c ON m.member_no=c.member_no WHERE m.corp_no is not null DBD Laboratorio 3º © A. Jaime 2005
37
Consultas con agregados (como SUM)
Abre el quinto script: (5)Indices para Agregados.sql Allí se analiza la siguiente consulta sobre la tabla charge: Sigue los pasos del script. Cuál de los índices da mejores resultados y por qué SELECT member_no, SUM(charge_amt) AS TotalVentas FROM charge GROUP BY member_no ORDER BY member_no DBD Laboratorio 3º © A. Jaime 2005
38
Iconos nuevos Stream aggregate / Aggregate Compute Scalar
Cálculo de SUM, AVG, .. aprovechando el orden del recorrido Compute Scalar Cálculo de valores a partir de otros contenidos en la misma fila DBD Laboratorio 3º © A. Jaime 2005
39
Comparación consulta con SUM
Sin IS: 583 bloques Con IS con atributos de SELECT (SUM) y GROUP BY-ORDER BY en ese orden: 236 bloques Con IS con atributos de GROUP BY-ORDER BY y SELECT (SUM) en ese orden: 236 bloques DBD Laboratorio 3º © A. Jaime 2005
40
Índices interesantes para agregados (como SUM)
Se calcula de dos formas: Con un fichero intermedio hash (dir. calculado) Recorriendo un índice/fichero ordenado adecuadamente Conviene usar la 2ª opción para evitar el coste de crear el fichero intermedio Interesa crear índices que incluyan a los atributos de GROUP BY, a los de WHERE y a los de SELECT (sobre los que se aplica la función, por ejemplo SUM) DBD Laboratorio 3º © A. Jaime 2005
41
Ejercicio: consulta con agregados
Crea índices interesantes para la siguiente consulta: ¿Puedes bajar de un total de 55 bloques (no 68)? SELECT AVG(statement_amt), member_no FROM statement with(index(CurMiemCant)) WHERE statement_current <> 0 GROUP BY member_no ORDER BY AVG(statement_amt) DBD Laboratorio 3º © A. Jaime 2005
42
Cómo crear vistas (vistas normales, no materializadas)
Con el administrador corporativo: Utiliza alguna de las BD que creaste en laboratorios anteriores. Selecciona views. Con el botón derecho del ratón selecciona New View. La definición de la vista se expresa como una consulta SELECT. Con el analizador de consultas usando la sintaxis de SQL create view ... Las vistas son otra forma de tener consultas almacenadas en la BD. DBD Laboratorio 3º © A. Jaime 2005
43
Uso de vistas materializadas (vistas indexadas de SQL Server)
Abre el sexto script: (6)Indices de Vistas.sql Allí se analiza la misma consulta con agregados anterior: Sigue los pasos del script. Cómo se consigue ahora el mejor resultado y por qué SELECT member_no, SUM(charge_amt) AS TotalVentas FROM charge GROUP BY member_no ORDER BY member_no DBD Laboratorio 3º © A. Jaime 2005
44
Comparación: sólo índices frente a vistas materializadas
Sin vista: 236 bloques Con vista: 236 bloques / aprox. 250 msg. Con vista indexada (materializada): 34 bloques / aprox. 186 msg. Recorrido de índice Recorrido del mismo índice Recorrido de la vista indexada DBD Laboratorio 3º © A. Jaime 2005
45
Uso de vistas materializadas (indexed views)
Sólo podemos utilizarlas con: Enterprise o Developer Edition SCHEMABOUND: impide modificar la definición de la tabla base COUNT_BIG en SELECT cuando hay funciones agregadas Problema: Puede afectar al rendimiento de INSERT / DELETE / UPDATE sobre la tabla base Ventajas: El resultado de la consulta se mantiene continuamente calculado Se reduce el uso de Cache DBD Laboratorio 3º © A. Jaime 2005
46
Ejercicio: uso de vistas materializadas
Crear una vista indexada para la siguiente consulta. Comparar con el mejor resultado obtenido en el 4º script (173 bloques). Ayuda: el índice habrá que construirlo sobre las columnas resultado de la consulta (las de select). ¿Te da 4 bloques transferidos? (frente a 173 que era la mejor opción con índices) SELECT s.statement_no, p.payment_no FROM dbo.statement as s JOIN dbo.payment as p ON s.member_no=p.member_no WHERE p.payment_amt between 1000 and 2000 DBD Laboratorio 3º © A. Jaime 2005
47
Visio Es un software para creación, edición y almacenamiento de diagramas de diversos tipos: bases de datos, gestión de proyectos, flujos, desarrollo de software (como UML), mapas, etc ... Hay varias ediciones de Visio. Algunas tienen más tipos de diagramas que otras. Visio incluye algunas características interesantes además de la pura edición de diagramas. Aquí veremos su capacidad de importar y exportar esquemas de BD. DBD Laboratorio 3º © A. Jaime 2005
48
Diagramas de BD en Visio
Dependiendo de la versión incluye más o menos tipos de diagrama de BD. Lo que Visio llama Entity-Relationship o Entidad Relación no es tal, sino un tipo de diagrama especial de Visio cercano a un esquema relacional. El diagrama E/R sería lo que Visio llama Chen ERD En los diagramas de Software se incluyen los diagramas de clase de UML (Static Structure) Inicia Visio y selecciona File New Database DataBase Model Diagram DBD Laboratorio 3º © A. Jaime 2005
49
Ingeniería inversa Extraeremos el diagrama de la BD Northwind de SQL Server En Database selecciona Reverse Engineer y realiza los siguientes pasos: Selecciona SQL Server y pulsa New para crear una fuente de datos ODBC para Northwind: Origen de datos de usuario – SQL Server – NW_odbc (si existía en la 1ª pantalla pon NW2_odbc) - (descripción vacía) - Apadeva.unirioja.es – Autenticación SQL Server – dbd – dbd03 – BD predeterminada – Northwind – Probar origen de datos (y si va bien ...) – Aceptar Seleccionar NW_odbc (o NW2_odbc, la que tu has creado) En Objects deja seleccionados: tables-Primary K-Indexes- Foreign K. En Select tables pulsa Select All y luego Finish DBD Laboratorio 3º © A. Jaime 2005
50
Ingeniería inversa (2) Aparecerá una ventana con las tablas de la BD
Seleccionar todas las tablas Pinchar con el ratón y arrastrar y soltar sobre la hoja Se verá el diagrama correspondiente a la BD Northwind Se puede ajustar el diagrama con Tools Layout Shapes (poner por ejemplo Spacing.. Space between Shapes a 5 mm) El diagrama se puede guardar en un archivo de visio, añadir, modificar, etc. Estudia el diagrama. Compáralo con la BD real: ¿Qué significan: PK, FK1, FK2, ..., I1, I2, ...? ¿A qué corresponden las flechas entre tablas? ¿Y la punta de la flecha? DBD Laboratorio 3º © A. Jaime 2005
51
Creación de un diagrama
Crea un diagrama de Visio del mismo tipo que el anterior para el siguiente esquema de BD. Utiliza los tipos de datos más adecuados para cada atributo. Crea índices para Título y NombreAutor IdLibro NombreAutor AUTORES_LIBROS IdLibro IdSucursal NúmCopias COPIAS_LIBRO IdLibro Título NombreEditorial LIBRO IdLibro IdSucursal NúmTarjeta PRÉSTAMOS FechaSale FechaDevol NúmTarjeta Nombre Dirección LECTOR Teléfono DBD Laboratorio 3º © A. Jaime 2005
52
Creación de una BD a partir del diagrama
A partir del diagrama se puede crear un esquema de BD. Hay varias posibilidades: SQL Server, Access, ... Primero crea una BD vacía en SQL Server. Pon de nombre Bib_Mar_Est (si te apellidas Martínez Estefanía). Crea una fuente de datos odbc para la BD. Database Generate y seguir los siguientes pasos en el asistente: Seleccionar Create new database –DB already exists – Selecciona la fuente de datos odbc – ... DBD Laboratorio 3º © A. Jaime 2005
53
Fin de los laboratorios
3 y 4 DBD Laboratorio 3º © A. Jaime 2005
54
Explicación algoritmos
55
Algoritmo de Merge/Join
1º 2º 4º 7º 3º 5º 6º 8º 5 2 Juan Feli 9 Luisa 8 Iker a c f j 24 Ignacio 15 16 Arantza Inés 28 Roberto e g h m a Juan 5 24 Ignacio 15 16 Arantza Inés 28 Roberto e g h m Merge/Join c Feli 2 f Luisa 9 j Iker 8 Ficheros ordenados (en el ejemplo por la primera letra) Un recorrido a cada fichero Resultado: las filas de los dos ficheros ordenadas Se toma en cada paso la menor de las dos filas y se avanza a la siguiente fila sólo en la fila tomada Si las filas son iguales se toman y avanza en ambas DBD Laboratorio 3º © A. Jaime 2005
56
Algunas preguntas de tipo test
Sobre los resultados obtenidos
57
Consulta simple: Índice con mejores resultados
El que resuelve la consulta con menos transferencias de bloque (lecturas lógicas) ¿Qué índice da mejor resultado? ¿Por qué da mejor resultado? (una es más cierta que las demás) Porque sólo usa el índice para resolver la consulta. Porque sólo recorre una vez las filas de la tabla. Porque sólo usa el índice para resolver la consulta pero no necesita recorrer todas sus hojas. Porque le vale con recorrer todas las hojas del índice. Comprueba que ejecutando la consulta SELECT sin “with” elige la mejor opción DBD Laboratorio 3º © A. Jaime 2005
58
AND: índice con mejores resultados (consulta 1)
¿Con qué índice se obtiene mejor resultado? ¿Por qué da mejor resultado? (una es más cierta que las demás) Porque sólo necesita recorrer las hojas de un índice Porque recorre una sola vez las tuplas de la tabla Porque sólo necesita buscar en un índice y recorrer algunas de sus hojas Porque crea un fichero de direccionamiento calculado (hash) intermedio Comprueba que ejecutando la consulta SELECT sin “with” elige la mejor opción DBD Laboratorio 3º © A. Jaime 2005
59
OR: índice con mejores resultados
¿Con qué índice se obtiene mejor resultado? ¿Por qué da mejor resultado? (una es más cierta que las demás) Porque no necesita eliminar duplicados Porque elimina duplicados basándose en la lista de atributos de SELECT Porque elimina duplicados basándose en el valor de clave primaria Porque no necesita consultar las tuplas de la tabla, sólo entradas de uno o varios índices Comprueba que ejecutando la consulta SELECT sin “with” elige la mejor opción DBD Laboratorio 3º © A. Jaime 2005
60
JOIN: índices con mejores resultados
¿Con qué índice se obtiene mejor resultado? ¿Por qué da mejor resultado? Porque se reduce el número de procesos de ciclo anidado Porque recorre sólo una vez las tuplas de cada tabla Porque no necesita consultar tuplas de ninguna tabla, sólo entradas de índices Porque se evita recorrer un índice primario Comprueba que ejecutando la consulta SELECT sin “with” elige la mejor opción DBD Laboratorio 3º © A. Jaime 2005
61
Asistente para optimización de índices
Es una herramienta incorporada al analizador de consultas que sugiere índices para acelerar una consulta dada. Consulta Asistente para optimización de índices Abre el script 1, elimina todos los índices definidos sobre la tabla member y usa el asistente para optimizar la consulta: ¿Se parecen los índices obtenidos con el asistente a nuestra mejor opción para el ejemplo? ¿Cómo funciona este asistente? DBD Laboratorio 3º © A. Jaime 2005
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.