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' 


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow