Microsoft SQL Server
Índice
Buscar..
Crear índice agrupado
Con un índice agrupado, las páginas de hojas contienen las filas de la tabla real. Por lo tanto, solo puede haber un índice agrupado.
CREATE TABLE Employees
(
ID CHAR(900),
FirstName NVARCHAR(3000),
LastName NVARCHAR(3000),
StartYear CHAR(900)
)
GO
CREATE CLUSTERED INDEX IX_Clustered
ON Employees(ID)
GO
Crear índice no agrupado
Los índices no agrupados tienen una estructura separada de las filas de datos. Un índice no agrupado contiene los valores de clave de índice no agrupado y cada entrada de valor clave tiene un puntero a la fila de datos que contiene el valor clave. Puede haber un máximo de 999 índices no agrupados en SQL Server 2008/2012.
Enlace de referencia: https://msdn.microsoft.com/en-us/library/ms143432.aspx
CREATE TABLE Employees
(
ID CHAR(900),
FirstName NVARCHAR(3000),
LastName NVARCHAR(3000),
StartYear CHAR(900)
)
GO
CREATE NONCLUSTERED INDEX IX_NonClustered
ON Employees(StartYear)
GO
Mostrar información del índice
SP_HELPINDEX tableName
Índice a la vista
CREATE VIEW View_Index02
WITH SCHEMABINDING
AS
SELECT c.CompanyName, o.OrderDate, o.OrderID, od.ProductID
FROM dbo.Customers C
INNER JOIN dbo.orders O ON c.CustomerID=o.CustomerID
INNER JOIN dbo.[Order Details] od ON o.OrderID=od.OrderID
GO
CREATE UNIQUE CLUSTERED INDEX IX1 ON
View_Index02(OrderID, ProductID)
Índice de caída
DROP INDEX IX_NonClustered ON Employees
Devuelve los índices de tamaño y fragmentación.
sys.dm_db_index_physical_stats (
{ database_id | NULL | 0 | DEFAULT }
, { object_id | NULL | 0 | DEFAULT }
, { index_id | NULL | 0 | -1 | DEFAULT }
, { partition_number | NULL | 0 | DEFAULT }
, { mode | NULL | DEFAULT }
)
Sample :
SELECT * FROM sys.dm_db_index_physical_stats
(DB_ID(N'DBName'), OBJECT_ID(N'IX_NonClustered '), NULL, NULL , 'DETAILED');
Reorganizar y reconstruir índice
avg_fragmentation_in_percent value | Declaración correctiva |
---|---|
> 5% y <= 30% | REORGANIZAR |
> 30% | RECONSTRUIR |
ALTER INDEX IX_NonClustered ON tableName REORGANIZE;
ALTER INDEX ALL ON Production.Product
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
STATISTICS_NORECOMPUTE = ON);
Reconstruir o reorganizar todos los índices en una tabla
La reconstrucción de los índices se realiza utilizando la siguiente declaración
ALTER INDEX All ON tableName REBUILD;
Esto elimina el índice y lo vuelve a crear, eliminando la administración, recupera el espacio en disco y vuelve a ordenar las páginas de índice.
También se puede reorganizar un índice usando
ALTER INDEX All ON tableName REORGANIZE;
que utilizará recursos mínimos del sistema y desfragmentará el nivel de hoja de los índices agrupados y no agrupados en tablas y vistas al reordenar físicamente las páginas de nivel de hoja para que coincidan con el orden lógico, de izquierda a derecha, de los nodos de hoja
Reconstruir toda la base de datos de índice
EXEC sp_MSForEachTable 'ALTER INDEX ALL ON ? REBUILD'
Indice de investigaciones
Podría usar "SP_HELPINDEX Table_Name", pero Kimberly Tripp tiene un procedimiento almacenado (que se puede encontrar aquí ), que es un mejor ejemplo, ya que muestra más información sobre los índices, incluidas las columnas y la definición del filtro, por ejemplo:
Uso:
USE Adventureworks
EXEC sp_SQLskills_SQL2012_helpindex 'dbo.Product'
Alternativamente, Tibor Karaszi tiene un procedimiento almacenado (que se encuentra aquí ). El último también mostrará información sobre el uso del índice y, opcionalmente, proporcionará una lista de sugerencias de índice. Uso:
USE Adventureworks
EXEC sp_indexinfo 'dbo.Product'