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