Non importa se vengono creati tramite uno script T-SQL o tramite Designer. La tua domanda è un po' ambigua, quindi non sono sicuro che tu stia chiedendo anche se va bene indicizzare tutte le chiavi esterne. Tuttavia, se lo sei, gli indici dovrebbero essere creati su colonne a cui si fa spesso riferimento nelle query e puoi fare quanto segue per migliorare le prestazioni:
-
Esegui la procedura guidata di ottimizzazione del database che fornirà un riepilogo dei miglioramenti e consiglierà gli indici.
-
Indicizza tutte le chiavi esterne ed esegui il piano di esecuzione (per vedere se le query vengono eseguite più velocemente o più lentamente).
Per creare un indice tramite T-SQL
:
CREATE INDEX IX_INDEX_NAME
ON Table (FieldName);
Per ottenere un elenco di tutte le chiavi esterne:
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
Per generare uno script che applichi gli indici a tutte le chiavi esterne, puoi farlo:
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