Sunteți pe pagina 1din 9

Creacin y Mantenimiento de ndices

Prctica A: Creacin y mantenimiento de ndices


Objetivos
Despus de realizar esta prctica, el alumno ser capaz de: Crear ndices. Determinar el tamao y la densidad de los ndices.

Requisitos previos
El archivo lab075.zip contiene los archivos de comandos necesarios para la realizacin de la prctica, as como las correspondientes soluciones. Para la realizacin de las prcticas es necesario ejecutar el script Restore.cmd del directorio Restore.

Creacin y Mantenimiento de ndices

Ejercicio 1 Creacin de ndices


En este ejercicio crear varios ndices para complementar las restricciones FOREIGN KEY de las tablas de la base de datos ClassNorthwind. Para crear un ndice en la tabla Orders En este procedimiento abrir un archivo de comandos que crea un ndice, revisar su contenido, lo ejecutar y comprobar que el ndice se ha creado. 1. Abra el Analizador de consultas SQL y, si as se le pide, conctese con el servidor local con autenticacin de Microsoft Windows. 2. En la lista BD, haga clic en ClassNorthwind. 3. Abra el archivo de comandos CreaIndx1.sql. 4. Revise la instruccin CREATE INDEX. Esta secuencia de comandos crea un ndice no agrupado llamado Orders_Customers_link en la columna CustomerID de la tabla Orders con un valor de FILLFACTOR de 75. 5. Ejecute el archivo de comandos. 6. Compruebe que se ha creado el ndice Orders_Customers_link; para ello, ejecute la instruccin siguiente:
EXEC sp_help Orders

El resultado del procedimiento almacenado del sistema sp_help muestra que existe el ndice no agrupado Orders_Customers_link, basado en la columna CustomerID de la tabla Orders.

Creacin y Mantenimiento de ndices

Para crear ndices basados en claves externas referidas a la tabla Products En este procedimiento crear ndices agrupados y no agrupados para todas las referencias de clave externa a la tabla Products. Para ello, utilizar la informacin que se detalla. Puede usar el Asistente para creacin de ndices desde el Administrador corporativo de SQL Server o escribir una instruccin de Transact-SQL en el Analizador de consultas SQL. El archivo Soluciones\CreaIndx2.sql es la secuencia de comandos completa para este procedimiento. 1. Compruebe que est usando la base de datos ClassNorthwind. 2. Escriba y ejecute una secuencia de comandos que cree los ndices siguientes.
Tipo de ndice Nombre Agrupado No agrupado Tabla Columna CategoryID SupplierID Valor de Fillfactor 0 0

Products_CategoryID_link Products Products_SupplierID_link Products

CREATE CLUSTERED INDEX Products_CategoryID_link ON Products(CategoryID) CREATE NONCLUSTERED INDEX Products_SupplierID_link ON Products(SupplierID)

3. Consulte la tabla del sistema sysindexes para comprobar que se han creado los ndices.

Creacin y Mantenimiento de ndices

Para comprobar la existencia de los ndices creados En este procedimiento ejecutar instrucciones para comprobar que los ndices creados existen y son correctos. 1. Ejecute el procedimiento almacenado del sistema sp_helpindex con la tabla Orders. Cul es el resultado? Orders_Customers_link. ____________________________________________________________ ____________________________________________________________ 2. Ejecute el procedimiento almacenado del sistema sp_helpindex con la tabla Products. Por qu hay ndices en las columnas de clave externa? El ndice de clave externa no es imprescindible, pero es recomendable para asociar los miembros de la clave externa con la clave principal. ____________________________________________________________ ____________________________________________________________ Por qu ninguno de los ndices es exclusivo? Porque representan claves externas. A menudo, la relacin entre la clave principal y las claves externas es de uno a varios. Por ello, un mismo valor de la clave principal puede tener relacin con muchos valores de la misma clave en la columna de clave externa. ____________________________________________________________ ____________________________________________________________

Creacin y Mantenimiento de ndices

Ejercicio 2 Examen de las estructuras de ndices


En este ejercicio utilizar el Analizador de consultas SQL para examinar la estructura de la tabla antes de crear ndices. Crear varios tipos de ndices con distintos valores de FILLFACTOR y observar los efectos en la estructura de la tabla. Puede abrir, revisar y ejecutar secciones del archivo de comandos ExamIndex.sql que o bien ejecutar las instrucciones de Transact-SQL proporcionadas. Para observar la estructura inicial de la tabla En este procedimiento va a ejecutar una instruccin de Transact-SQL para obtener informacin acerca de la tabla Member. 1. Escriba y ejecute estas instrucciones de forma individual para obtener informacin acerca de la tabla Member:
USE credit GO EXEC sp_spaceused member SELECT * FROM sysindexes WHERE id = OBJECT_ID('member') DBCC SHOWCONTIG ('member')

2. Registre la informacin estadstica de la tabla siguiente.

Informacin Nmero de filas Nmero de ndices

Origen sp_spaceused: filas SELECT * FROM sysindexes WHERE id = OBJECT_ID('member')

Resultado 10.000 Ninguna. Una fila en sysindexes con un valor de 0 en indid representa la tabla propiamente dicha. 145 67

Nmero de pginas Nmero de filas por pgina

SHOWCONTIG: Pginas recorridas Calculo y redondeo de los resultados. (n de filas/ n de pginas) = n de filas por pgina

Nmero de extensiones Promedio de relleno de extensin Promedio de relleno de pgina

SHOWCONTIG: Cambios de extensin SHOWCONTIG: Promedio de pginas por extensin SHOWCONTIG: Promedio de densidad de pgina (completa)

18 7,6 98,82%

Creacin y Mantenimiento de ndices

Para crear un ndice agrupado En este procedimiento crear un ndice agrupado nico y observar los cambios en la estructura de la tabla. Tambin obtendr informacin acerca de la estructura del ndice. 1. Escriba y ejecute esta instruccin para crear un ndice agrupado nico con la columna member_no de la tabla Member, sin especificar un valor de FILLFACTOR:
USE credit CREATE UNIQUE CLUSTERED INDEX mem_no_CL ON member (member_no)

2. Escriba y ejecute la instruccin siguiente para obtener informacin acerca de la tabla Member:
USE credit SELECT * FROM sysindexes WHERE id = OBJECT_ID('member') DBCC SHOWCONTIG ('member')

3. Registre la informacin estadstica de la tabla siguiente.

Informacin Nmero de pginas del ndice agrupado Nmero de pginas de datos en el ndice agrupado. Nmero de pginas sin datos en el ndice agrupado. Nmero de ndices

Origen fila de sysindexes: used fila de sysindexes: dpages (used dpages) SELECT * FROM sysindexes

Resultado 183 145 145 142 = 3 Uno. Una fila en sysindexes con un valor de 1 en indid representa el ndice agrupado. 145 71

Nmero de pginas Nmero de filas por pgina

SHOWCONTIG: Pginas recorridas Calculo y redondeo de los resultados. (n de filas/ n de pginas) = n de filas por pgina

Nmero de extensiones Promedio de relleno de extensin Promedio de relleno de pgina

SHOWCONTIG: Cambios de extensin SHOWCONTIG: Promedio de pginas por extensin SHOWCONTIG: Promedio de densidad de pgina (completa)

18 7,6 98,82

Creacin y Mantenimiento de ndices

An estn llenas las pginas? S. ____________________________________________________________ ____________________________________________________________ Sigue siendo la tabla contigua? S. ____________________________________________________________ ____________________________________________________________ La creacin de un ndice agrupado hace ms compactas las pginas de datos? Razone la respuesta. No siempre. Depende de la naturaleza de los datos. Las pginas se pueden compactar si la tabla est fragmentada debido a las actualizaciones del valor de clave o las eliminaciones e inserciones desordenadas. Si las pginas ya estn compactadas, la creacin de un ndice agrupado no tendr ningn efecto. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ Para crear un ndice no agrupado En este procedimiento crear un ndice no agrupado nico y obtendr informacin acerca de la estructura del ndice. 1. Escriba y ejecute esta instruccin para eliminar el ndice creado anteriormente:
USE credit EXEC index_cleanup member

2. Escriba y ejecute esta instruccin para crear un ndice no agrupado con la columna firstname de la tabla Member, sin especificar un valor de FILLFACTOR:
USE credit CREATE NONCLUSTERED INDEX indx_fname ON member(firstname)

Creacin y Mantenimiento de ndices

3. Escriba y ejecute esta instruccin SELECT que devuelve las filas de sysindexes de la tabla Member:
USE credit SELECT * FROM sysindexes WHERE id = OBJECT_ID('member')

4. Registre la informacin estadstica de la tabla siguiente.

Informacin Nmero de pginas del ndice no agrupado en la columna firstname Nmero de pginas en el nivel de hoja Nmero aproximado de filas por pgina de hoja

Origen fila de sysindexes: used fila de sysindexes: dpages (n de filas en la tabla/n de pginas de nivel de hoja)

Resultado 35 33 (10000 / 33) = 303

Creacin y Mantenimiento de ndices

Para crear un ndice no agrupado con un valor de FILLFACTOR En este procedimiento crear un ndice no agrupado y observar los cambios en la estructura de la tabla. 1. Escriba y ejecute esta instruccin para eliminar el ndice no agrupado de la tabla Member:
USE credit EXEC index_cleanup member

2. Escriba y ejecute esta instruccin para crear el mismo ndice, pero ahora con un valor de FILLFACTOR del 25 por ciento:
USE credit CREATE NONCLUSTERED INDEX indx_fname ON member(firstname) WITH FILLFACTOR=25

3. Escriba y ejecute esta instruccin SELECT que devuelve las filas de sysindexes de la tabla Member:
USE credit SELECT * FROM sysindexes WHERE id = OBJECT_ID('member')

4. Registre la informacin estadstica de la tabla siguiente.

Informacin Nmero de pginas en este ndice Nmero de pginas en el nivel de hoja. Nmero aproximado de filas por pgina de hoja

Origen fila de sysindexes: used fila de sysindexes: dpages (n de filas en la tabla/n de pginas de nivel de hoja)

Resultado 132 130 (10000 / 130) = 76

Es proporcional el aumento del tamao del nivel de hoja al valor de FILLFACTOR? S. _____________________________________________________________ Cmo se puede determinar si el aumento del tamao del nivel de hoja es proporcional al valor de FILLFACTOR del 25 por ciento? Con un valor de FILLFACTOR de 0 (predeterminado), pueden caber 303 filas en cada pgina de nivel de hoja. Multiplique 303 por el 25 por ciento y el resultado es 76 filas. ste es el nmero de filas que cabrn en una pgina de nivel de hoja que slo est llena un 25 por ciento. ____________________________________________________________ ____________________________________________________________

S-ar putea să vă placă și