Microsoft SQL Server
Indice
Ricerca…
Crea indice cluster
Con un indice cluster le pagine foglia contengono le righe della tabella effettiva. Pertanto, può esistere solo un indice cluster.
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
Crea indice non consolidato
Gli indici non in cluster hanno una struttura separata dalle righe di dati. Un indice non in cluster contiene i valori delle chiavi di indice non cluster e ogni voce di valore chiave ha un puntatore alla riga di dati che contiene il valore della chiave. È possibile avere un massimo di 999 indici non cluster su SQL Server 2008/2012.
Collegamento per riferimento: 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
Mostra informazioni sugli indici
SP_HELPINDEX tableName
Indice in 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)
Indice di caduta
DROP INDEX IX_NonClustered ON Employees
Restituisce indici di dimensioni e frammentazione
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');
Riorganizza e ricostruisce l'indice
valore avg_fragmentation_in_percent | Dichiarazione correttiva |
---|---|
> 5% e <= 30% | RIORGANIZZARE |
> 30% | RICOSTRUIRE |
ALTER INDEX IX_NonClustered ON tableName REORGANIZE;
ALTER INDEX ALL ON Production.Product
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
STATISTICS_NORECOMPUTE = ON);
Ricreare o riorganizzare tutti gli indici su una tabella
La ricostruzione degli indici viene eseguita utilizzando la seguente dichiarazione
ALTER INDEX All ON tableName REBUILD;
Questo elimina l'indice e lo ricrea, rimuovendo la frustrazione, recupera lo spazio su disco e riordina le pagine indice.
Si può anche riorganizzare un indice usando
ALTER INDEX All ON tableName REORGANIZE;
che utilizzerà risorse di sistema minime e deframmenta il livello foglia di indici cluster e non cluster su tabelle e viste riordinando fisicamente le pagine a livello di foglia in modo che corrispondano all'ordine logico, da sinistra a destra, dei nodi foglia
Ricostruisci tutto il database degli indici
EXEC sp_MSForEachTable 'ALTER INDEX ALL ON ? REBUILD'
Indagini sull'indice
Potresti usare "SP_HELPINDEX Table_Name", ma Kimberly Tripp ha una stored procedure (che può essere trovata qui ), che è un esempio migliore, poiché mostra di più sugli indici, incluse le colonne e la definizione del filtro, ad esempio:
Uso:
USE Adventureworks
EXEC sp_SQLskills_SQL2012_helpindex 'dbo.Product'
In alternativa, Tibor Karaszi ha una procedura memorizzata (trovata qui ). Più avanti mostrerà le informazioni sull'utilizzo dell'indice e, facoltativamente, fornirà un elenco di suggerimenti sugli indici. Uso:
USE Adventureworks
EXEC sp_indexinfo 'dbo.Product'