Microsoft SQL Server
Indice
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'