Diseño de Bases de Datos

Slides:



Advertisements
Presentaciones similares
el 1, el 4 y el 9 tres cuadrados perfectos autosuficientes
Advertisements

INTRODUCCIÓN A WINDOWS
Paso 1 Portada YO SOY EUROPEO Comisión Europea.
CONSULTAS SOBRE UNA TABLA
1 LA UTILIZACION DE LAS TIC EN LAS PYMES GALLEGAS AÑO Resumen. 24 de Junio de 2005.
El Asistente para Presupuestos
Diseño de Bases de Datos
Diseño de Bases de Datos
A. Jaime y C. Domínguez Diseño de Bases de Datos Laboratorios Diseño físico con índices en SQL Server.
integridad referencial
IBD Clase 7.
Reportes por Períodos Guía para obtener reportes por períodos Octubre 2008.
Reportes de Tutoriales Guía para obtener reportes de tutoriales Octubre 2008.
Estadísticas en SQL Server Rocío Contreras Águila, Primer Semestre 2010.
Implementación de procedimientos almacenados
Rocío Contreras Águila Primer Semestre 2010
Optimización del rendimiento de las consultas
Supervisión del rendimiento de SQL Server
Análisis de consultas.
Copia de seguridad de bases de datos
CONSULTAS AL SISTEMA DE GESTIÓN DE ARCHIVO (AKS / SGA)
Instrumentación Virtual con LabVIEW
Al abrir el Access aparece una ventana para crear una base en blanco, con la ayuda de un asistente o abrir una existente. Al principio optamos por la primera.
Estructuras de Información y Archivos
BASE DE DATOS Primeros pasos
Introducción a Simulink
PAGO DE LIQUIDACIONES ADUANERAS MEDIANTE VOLANTE ELECTRONICO DE PAGO
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:23 PRESENTACION: BASE DE DATOS ALUMNAS: Velazquez Corona Elsa Ponciano Antonio.
Fernando Velasco
4. Mantenimiento de los espacios de trabajo. Manual de formación 2 4. Modificación de los espacios de trabajo 4.1 Introducción……………………………….……..……..…pág.
0/ Localizar la intranet en los tablet del alumno. Como la Intranet está instalada en algunos ordenadores, debemos localizarla primeramente para poder.
BIENVENIDO AL CURSO INTRODUCTORIO LIBREOFFICE IMPRESS 3.4.5
Por: Ronald Toscano Pretelt
Formulario y reportes.
1) Abrir archivos: Si necesitamos abrir varios archivos, podemos usar las teclas “CTRL” + “A” (o “CTRL” + “F12”) para acceder directamente al cuadro de.
Oscar Navarrete J. Jorge Gutiérrez A.
Introducción a los protocolos de enrutamiento dinámico
TUTORIAL DE SUBVERSION
Montevideo 14 de Diciembre Gustavo Larriera Alejandro Ponicke El nuevo día a día con SQL Server 2005.
4. Introducción a Aspen Plus
Cont.. Universidad Católica de El Salvador Centro Regional de Ilobasco Licenciatura en ciencias de la educación con especialidad en matemática. Portafolio.
PASOS PARA EL FORMATEO DE UN PC
Jessica dayana guerrero mora Katherine monsalve duran 7.1
Minicurso "Presentaciones con PowerPoint"
Administrador de Base de Datos (Microsoft Access)
Índice Sesión I Bloque I (09:30 a 10:30 Horas) Configuración Inicial
Evaluación y Optimización de Consultas Láminas seleccionadas de las láminas de la Prof. María Esther Vidal.
Teoría de Sistemas Operativos
Instructivo para la Gestión de Solicitudes de los Clientes - Alertran DEPRISA Febrero 2013.
Subconsultas Avanzadas
Una base de datos es un “almacén” que nos permite guardar grandes cantidades de información de forma organizada para que luego podamos encontrar y utilizar.
BASES DE DATOS Con Access.
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
Paper 418/ May/June Task C – data maniputation - ACCESS Lo primero que hay que hacer el IMPORTAR el archivo SCA6MOB.CSV que nos bajamos de Internet.
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
DESCRIPCION DEL SERVICIO “LISTADO” (Listado de Usuario) Descripción: Obtención de un listado de usuarios accediendo a una Base de Datos SQL a través de.
Diseño de una base de datos y elementos básicos Integrantes: López Ponce de León José Efrén Velazquez Martínez Brenda Equipo:10Grupo:307.
Sustentante: Francis Ariel Jiménez Zapata Matricula: Grupo: 2 Profesora: Jose Doñe Asignatura: Sistema Operativo 2.
INSTRUCCIONES Elaboración de la Presentación:
Introducción a la Optimización de Consultas. Francisco Moreno.
Unidad 7 Escritorio de Windows.
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
MSSQL SERVER CURSO BÁSICO 1. CONCEPTOS BASICOS DE SQL. DESCRIPCIÓN DEL CURSO. Sesión 3: Índices Uso, Creación, Tipos, Eliminación LENGUAJE DE CONSULTAS.
¿Cómo programar un Botón para agregar registros a una base de datos?
En el presente trabajo, se explica los diferentes elementos que nos ofrece Microsoft Access, para hacer mas fácil y rápido la realización de bases de.
DLM Transact SQL Sesión I Introducción al SQL Server Uso de las herramientas de consultas del Transact SQL.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Structure Query Languaje SQL. Introducción a SQL El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por.
DML Transact SQL Sesión IX Introducción a los procedimientos almacenados.
A. Jaime y C. Domínguez Diseño de Bases de Datos Laboratorios Diseño físico con índices en SQL Server.
Transcripción de la presentación:

Diseño de Bases de Datos Laboratorios 3º y 4º Diseño físico con índices en SQL Server Introducción a Microsoft®VISIO®

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

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

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

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

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 10.000 registros Se han realizado 146 lecturas (accesos a bloque) DBD Laboratorio 3º © A. Jaime 2005

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

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

Í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

Í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

Í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

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

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

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

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

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

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

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

Í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

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

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

Iconos nuevos Filter Hash Match / Inner Join Conexión de varios a uno DBD Laboratorio 3º © A. Jaime 2005

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

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

Í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

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

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

Iconos nuevos Sort/Distinct Merge Join/Union Concatenation DBD Laboratorio 3º © A. Jaime 2005

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

Í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

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

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

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

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 + 1009Pr = 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

Í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

Ejercicio: consulta con JOIN Crea índices interesantes para la siguiente consulta: ¿Qué algoritmo utiliza? ¿Puedes bajar de un total de 187 + 5 bloques (no 187+19)? 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

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

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

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

Í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

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

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

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

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

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

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

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

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

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

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

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

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

Fin de los laboratorios 3 y 4 DBD Laboratorio 3º © A. Jaime 2005

Explicación algoritmos

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

Algunas preguntas de tipo test Sobre los resultados obtenidos

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

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

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

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

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