I) OBJETIVOS
Guía de la Asignatura. III) PRÁCTICAS DE LABORATORIO /*Indices en SQL Server */ -- Los indices al igual que los indices de los libros ofrecen una forma rapida de -- acceder a los datos que se esta buscando aun en tablas grandes CREATE DATABASE BD_PRUEBA2 GO use bd_prueba2 go CREATE TABLE AlumnoInfo ( id_alumno int identity(1,1), nombres varchar(30), ap varchar(20), am varchar(20), ciudad varchar(30), fecha_nac datetime, obs varchar(1000) ) GO --DROP TABLE AlumnoInfo /* Opciones de Indices */ /* Opcion online*/ -- Si esta en ON indica que las tablas e indices asociados estan -- disponibles para consultas y modificacion de datos durante la -- operacion de indexado. La opcion predeterminada es OFF CREATE INDEX idx_nombres ON AlumnoInfo (nombres) WITH (ONLINE = ON) -- Modificar la opcion de un indice ALTER INDEX idx_nombres ON AlumnoInfo REBUILD WITH (ONLINE=OFF) -- Eliminar un indice de la tabla DROP INDEX idx_nombres ON dbo.AlumnoInfo /* Crear un indice con la opcion ALLOW_ROW_LOCKS */ -- Si la opcion esta activada es ON(Opcion Predeterminada) -- se permite los Bloqueos de fila CREATE INDEX idx_nombres2 ON AlumnoInfo (nombres) WITH (ALLOW_ROW_LOCKS = OFF) /*Crear un indice con la opcion ALLOW_PAGE_LOCKS*/ -- Si la opcion esta activada es ON(Opcion Predeterminada) se permite los -- Bloqueos de pagina CREATE INDEX idx_nombre3 ON AlumnoInfo (nombres) WITH (ALLOW_PAGE_LOCKS = OFF) /*Crear un indice con la opcion ONLINE, ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS*/ CREATE INDEX idx_nombres4 ON AlumnoInfo (nombres) WITH (ONLINE = ON, ALLOW_ROW_LOCKS = OFF, ALLOW_PAGE_LOCKS = OFF) /*Crear un Indice Agrupado*/ -- Los Indices agrupados ordenan las filas segun la -- clave de agrupamiento. En general --, toda tabla deberia tener un solo indice agrupago; -- generalmento sobre la clave primaria CREATE CLUSTERED INDEX ci_fecha_nac ON dbo.AlumnoInfo(fecha_nac); -- Consultamos para verificar si pueden ser extraidos de la tabla SELECT * FROM dbo.ALumnoInfo; /*Deshabilitar el indice ejecutando la siguiente Instruccion*/ ALTER INDEX ci_fecha_nac ON dbo.AlumnoInfo DISABLE; -- Consultamos para verificar que no se pueden extraer datos de la tabla SELECT * FROM dbo.ALumnoInfo; /*Habilitar un indice agrupado*/ ALTER INDEX ci_fecha_nac ON dbo.AlumnoInfo REBUILD; GO -- Consultamos para verificar que se pueden extraer datos de la tabla SELECT * FROM dbo.ALumnoInfo; /* Crear un indice no agrupado */ -- Los Indices no agrupados no ordenan las filas de la tablas. -- Puede crear Hasta 249 indices no agrupados -- por tabla para satisfacer la mayor parte de sus consultas CREATE NONCLUSTERED INDEX idx_ap ON dbo.AlumnoInfo(ap); /*Indices cubiertos COVERED*/ -- Mediante los indices cuviertos, -- podemos ejecutar consultas sin necesidad de acceder a la tabla CREATE NONCLUSTERED INDEX idx_ap_am_nombres ON AlumnoInfo(ap,am,nombres) /*Indices Incluidos */ -- los indices de columnas incluidas permiten añadir -- valores al nivel de hoja del indice de forma que pueda -- crear implementaciones de indices complejas -- Solución para el límite de los 900 bytes en la creación de un Indice CREATE NONCLUSTERED INDEX idx_id_obs ON dbo.AlumnoInfo(id_alumno) INCLUDE(obs); -- Este campo excede el limite de 900 bytes puesto que lo definimos con varchar(1000) /* Buscar indices fragmentados*/ -- La siguiente consulta identifica el porcentaje de fragmentacion de los Indices de la BD USE AdventureWorks GO SELECT OBJECT_NAME(i.object_id) AS TableName, i.name AS IndexName, ips.avg_fragmentation_in_percent FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') ips JOIN sys.indexes i ON i.object_id = ips.object_id AND i.index_id = ips.index_id WHERE ips.avg_fragmentation_in_percent > 90 -- Resultado: -- TableName IndexName Promedio del porcentaje de Fragmentación --------------------------------------------------------------------------------- --vProductAndDescription IX_vProductAndDescription 98.5714285714286 --SalesOrderDetail AK_SalesOrderDetail_rowguid 100 --Individual XMLVALUE_Individual_Demographics 100 --Store PXML_Store_Demographics 98.4375 /* Defragmentación de un index*/ ALTER INDEX AK_SalesOrderDetail_rowguid ON Sales.SalesOrderDetail REORGANIZE IV) Tareas
|
DOCENCIA UNIVERSITARIA > Sistemas de Bases de Datos II > Laboratorio de Sistemas de Bases de Datos II >