Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

sql server :créer des index sur les clés étrangères si nécessaire

Peu importe qu'ils soient créés via un script T-SQL ou via le Designer. Votre question est un peu ambiguë, donc je ne sais pas si vous demandez également s'il est acceptable d'indexer toutes les clés étrangères. Toutefois, si c'est le cas, les index doivent être créés sur des colonnes fréquemment référencées dans les requêtes et vous pouvez procéder comme suit pour améliorer les performances :

  • Exécutez l'assistant de réglage de la base de données qui fournira un résumé des améliorations et recommandera des index.

  • Indexez toutes les clés étrangères et exécutez le plan d'exécution (pour voir si les requêtes s'exécutent plus rapidement ou plus lentement).

Pour créer un index via T-SQL :

CREATE INDEX IX_INDEX_NAME
ON Table (FieldName); 

Pour obtenir une liste de toutes les clés étrangères :

SELECT f.name AS ForeignKey, 
 OBJECT_NAME(f.parent_object_id) AS TableName, 
 COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName, 
 OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName, 
 COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName 
FROM sys.foreign_keys AS f 
INNER JOIN sys.foreign_key_columns AS fc 
ON f.OBJECT_ID = fc.constraint_object_id

Pour générer un script qui applique des index sur toutes les clés étrangères, vous pouvez procéder comme suit :

SELECT 'CREATE INDEX [IX_' + f.name + '] ON ' + OBJECT_NAME(f.parent_object_id) + '(' + COL_NAME(fc.parent_object_id, fc.parent_column_id) + ')]'
FROM sys.foreign_keys AS f 
INNER JOIN sys.foreign_key_columns AS fc 
ON f.OBJECT_ID = fc.constraint_object_id

http://msdn.microsoft.com/en-us/library/ms188783 .aspx