Documente Academic
Documente Profesional
Documente Cultură
Sesin Nro. 06
Tema: ndices
Parte II
Docentes: Ms.Cs. Karim Guevara Puente de la Vega Ing. Freddy Gonzales Saji
I OBJETIVOS
Crear ndices y vistas indizadas con caractersticas de unicidad o composicin. Describir cmo mantener ndices a lo largo del tiempo.
II REQUISITOS
Tener instalado SQL Server 2005 o 2008
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX nombrendice ON { tabla | vista } ( columna [ ASC | DESC ] [ ,...n ] ) [ON grupoDeArchivos ]
Ejemplo:
CREATE CLUSTERED INDEX CL_lastname ON employees(lastname)
Pgina: 2/8
La instruccin DROP INDEX permite quitar un ndice de una tabla. Al quitar un ndice, tenga en cuenta los siguientes hechos: No es posible utilizar la instruccin DROP INDEX con ndices creados con la restriccin PRIMARY KEY o UNIQUE. Sintaxis:
1. ndices nicos
Un ndice nico asegura que todos los datos de una columna indizada sean nicos y que no haya valores duplicados. Puede ser agrupado o no agrupado. Tener en cuenta que: Si una tabla contiene datos, SQL Server comprueba si hay valores duplicados al crear el ndice. SQL Server comprueba si hay valores duplicados cada vez que se utiliza la instruccin INSERT o UPDATE. Si hay valores de clave duplicados, SQL Server cancela la instruccin y genera un mensaje de error con el primer duplicado. Ejemplo:
USE Northwind CREATE UNIQUE NONCLUSTERED INDEX U_CustID ON customers(CustomerID)
Bsqueda de todos los valores duplicados de una columna Si en el momento de crear un ndice nico ya hay valores de clave duplicados, la instruccin CREATE INDEX produce un error. Puede usar la secuencia de comandos siguiente en cualquier tabla para buscar todos los valores duplicados de una columna:
SELECT index_col, COUNT (index_col) FROM tablename GROUP BY index_col HAVING COUNT(index_col)>1 ORDER BY index_col
Ejemplo:
SELECT CustomerID, COUNT(CustomerID) AS '# of Duplicates' FROM Northwind.dbo.Customers GROUP BY CustomerID HAVING COUNT(CustomerID)>1 ORDER BY CustomerID
2. ndices compuestos
Los ndices compuestos especifican ms de una columna como valor de clave. Puede crear ndices compuestos:
Pgina: 3/8
Es posible combinar hasta 16 columnas en un mismo ndice compuesto. Todas las columnas de un ndice compuesto deben proceder de la misma tabla, excepto cuando el ndice se crea en una vista. Defina en primer lugar la columna con mayor unicidad. La primera columna definida en la instruccin CREATE INDEX se conoce como columna de orden superior. La clusula WHERE de una consulta debe hacer referencia a la primera columna del ndice compuesto para que el optimizador de consultas lo utilice. Un ndice basado en (columna1, columna2) no es igual a uno basado en (columna2, columna1): cada uno tiene un orden de columnas distinto. La columna que contenga datos ms selectivos o que devuelva el menor porcentaje de filas determina, a menudo, el orden de las columnas. Los ndices compuestos son tiles para las tablas con claves de varias columnas.
Ejemplo:
USE Northwind CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID ON [Order Details] (OrderID, ProductID)
Utilice un valor de FILLFACTOR pequeo en los entornos de proceso de transacciones en lnea (OLTP). Utilice un valor de FILLFACTOR grande en los entornos de Analysis Services de SQL Server.
La tabla siguiente muestra los valores de la opcin FILLFACTOR y los entornos en que se utilizan habitualmente.
Pginas del nivel de hoja Rellenar completamente Rellenar hasta el porcentaje especificado Rellenar completamente
Pginas de niveles distintos del de hoja Dejar sino para una entrada de ndice Dejar sitio para una entrada de ndice Dejar sitio para una entrada de ndice
Actividad en los valores de clave Sin modificacin o modificaciones leves Modificaciones de moderadas a frecuentes Sin modificacin o modificaciones leves
100
Analysis Services
Opcin PAD_INDEX
La opcin PAD_INDEX especifica el porcentaje con que se deben llenar las pginas de ndice no situadas en el nivel de hoja.
USE Northwind CREATE INDEX OrderID_ind ON Orders(OrderID) WITH PAD_INDEX, FILLFACTOR=70
Ejemplo:
5. Mantenimiento de ndices
Instruccin DBCC SHOWCONTIG Muestra informacin acerca de la fragmentacin de los datos e ndices de una tabla especfica. Al ejecutarla, SQL Server recorre las pginas de ndices del nivel de hoja para determinar si una tabla o un ndice especficos estn muy fragmentados. Tambin determina si las pginas de datos o de ndices estn llenas.
En la tabla siguiente se describen las estadsticas que devuelve la instruccin DBCC SHOWCONTIG. Ejemplo:.
USE Northwind DBCC SHOWCONTIG (Customers, PK_Customers)
Resultados:
DBCC SHOWCONTIG recorriendo la tabla 'Customers'... Tabla: 'Customers' (2073058421); Id. de ndice: 1, Id. de base de datos: 6 Realizado recorrido de nivel TABLE. Pginas recorridas: 3 Extensiones recorridas: 2 Cambios de extensin: 1 Promedio de pginas por extensin: 1.5 Densidad de recorrido [Cuenta 50.00% [1:2] ptima:Cuenta real]: Fragmentacin del recorrido lgico: 0.00% Fragmentacin de recorrido de 50.00% extensin: Promedio de bytes libres por 246.7 pgina: Promedio de densidad de pgina 96.95% (completa): Ejecucin de DBCC completada. Si hay mensajes de error, consulte al administrador del sistema.
Instruccin DBCC INDEXDEFRAG Permite desfragmentar el nivel de hoja de ndices agrupados y no agrupados basados en tablas y vistas. Ejemplo:
Resultado:
Pages moved 28
Pages removed 9
IV PROCEDIMIENTO
Antes de empezar a desarrollar su practica debe de seguir las instrucciones del docente a cargo:
El archivo indicado por el docente contiene los archivos de comandos necesarios para la realizacin de la prctica. Para la realizacin de las prcticas es necesario ejecutar algunos script que le indique su profesor, para la restauracin de las Bases de Datos ClassNortwind y Credit. Creacin de ndices 01. Abra el Analizador de consultas SQL y, si as se le pide, inicie una sesin en el servidor local con autenticacin de Microsoft Windows 02. En la lista BD, haga clic en ClassNorthwind. 03. Abra el archivo de comandos CreaIndx1.sql. 04. Revise la instruccin CREATE INDEX. 05. Qu realiza la secuencia de comandos? 06. Ejecute el archivo de comandos. 07. Compruebe que se ha creado el ndice Orders_Customers_link; para ello, utilice el procedimiento almacenado del sistema sp_help 08. Escriba y ejecute una secuencia de comandos que cree los ndices siguientes en la BD ClassNorthwind:
Nombre
Tabla
Valor de Fillfactor 0 0
09. Consulte la vista del sistema sysindexes para comprobar que se han creado los ndices. 10. Ejecute el procedimiento almacenado del sistema sp_helpindex con la tabla Orders. Cul es el resultado? 11. Ejecute el procedimiento almacenado del sistema sp_helpindex con la tabla Products. Por qu hay ndices en las columnas de clave externa? 12. Por qu ninguno de los ndices es exclusivo? Examen de las estructuras de ndices
Para observar la estructura inicial de la tabla 13. Abra, revise y ejecute el archivo index_cleaup.sql 14. 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')
Pgina: 7/8
Para crear un ndice agrupado 16. 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: 17. 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')
18. Registre la informacin estadstica de la tabla siguiente.
20. Sigue siendo la tabla contigua? 21. La creacin de un ndice agrupado hace ms compactas las pginas de datos? Razone la respuesta.
Para crear un ndice no agrupado 22. Escriba y ejecute esta instruccin para eliminar el ndice creado anteriormente:
Para crear un ndice no agrupado con un valor de FILLFACTOR 26. Escriba y ejecute esta instruccin para eliminar el ndice no agrupado de la tabla Member: 27. Escriba y ejecute esta instruccin para crear el mismo ndice, pero ahora con un valor de FILLFACTOR del 25 por ciento: 28. Escriba y ejecute esta instruccin SELECT que devuelve las filas de sysindexes de la tabla Member: 29. Registre la informacin estadstica de la tabla siguiente.
30. Es proporcional el aumento del tamao del nivel de hoja al valor de FILLFACTOR? 31. Cmo se puede determinar si el aumento del tamao del nivel de hoja es proporcional al valor de FILLFACTOR del 25 por ciento?