Recherche…


Créer un index clusterisé

Avec un index clusterisé, les pages feuille contiennent les lignes de table réelles. Par conséquent, il ne peut y avoir qu'un seul index clusterisé.

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

Créer un index non clusterisé

Les index non clusterisés ont une structure distincte des lignes de données. Un index non clusterisé contient les valeurs de clé d'index non mises en cluster et chaque entrée de valeur de clé comporte un pointeur sur la ligne de données contenant la valeur de clé. Il peut y avoir un maximum de 999 index non clusterisés sur SQL Server 2008/2012.

Lien pour référence: 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

Afficher les infos d'index

SP_HELPINDEX tableName

Index sur vue

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) 

Index de baisse

DROP INDEX IX_NonClustered ON Employees

Retourne la taille et les index de fragmentation

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');  

Réorganiser et reconstruire l'index

valeur avg_fragmentation_in_percent Déclaration corrective
> 5% et <= 30% RÉORGANISER
> 30% RECONSTRUIRE
ALTER INDEX IX_NonClustered ON tableName REORGANIZE;  


ALTER INDEX ALL ON Production.Product
 REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
          STATISTICS_NORECOMPUTE = ON);

Reconstruire ou réorganiser tous les index sur une table

La reconstruction des index se fait à l'aide de l'instruction suivante

ALTER INDEX All ON tableName REBUILD;

Cela supprime l'index et le recrée, en supprimant les fractions, récupère l'espace disque et réorganise les pages d'index.

On peut aussi réorganiser un index en utilisant

ALTER INDEX All ON tableName REORGANIZE;

qui utilisera des ressources système minimales et défragmentera le niveau feuille des index clusterisés et non clusterisés sur les tables et les vues en réorganisant physiquement les pages de niveau feuille afin qu'elles correspondent à l'ordre logique de gauche à droite des nœuds feuilles

Reconstruire toute la base de données d'index

EXEC sp_MSForEachTable 'ALTER INDEX ALL ON ? REBUILD'

Enquêtes d'index

Vous pouvez utiliser "SP_HELPINDEX Table_Name", mais Kimberly Tripp a une procédure stockée (qui peut être trouvée ici ), qui est un meilleur exemple, car elle montre plus sur les index, y compris les colonnes et la définition de filtre, par exemple:
Usage:

USE Adventureworks 
EXEC sp_SQLskills_SQL2012_helpindex 'dbo.Product'

Tibor Karaszi a aussi une procédure stockée (trouvée ici ). Le dernier affichera également des informations sur l'utilisation des index et fournira éventuellement une liste de suggestions d'index. Usage:

USE Adventureworks 
EXEC sp_indexinfo 'dbo.Product' 


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow