Non importa se vengono creati tramite uno script T-SQL o tramite il Designer. La tua domanda è un po 'ambigua, quindi non sono sicuro se stai chiedendo anche se è giusto indicizzare tutte le chiavi esterne. Tuttavia, se, gli indici devono essere creati su colonne cui viene fatto riferimento di frequente nelle query ed è possibile effettuare le seguenti operazioni per migliorare le prestazioni:
Eseguire la procedura guidata tuning del database che fornirà una sintesi dei miglioramenti e raccomandare indici .
Indicizzare tutte le chiavi esterne ed eseguire il piano di esecuzione (per vedere se le query si stanno svolgendo 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 applica gli indici in tutte le chiavi esterne si potrebbe Amento:
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
fonte
2012-05-24 10:20:44
penso che è necessario per chiarire la tua domanda, vedi questa osservazione in risposta di Darren: * "La tua domanda è un po 'ambigua , quindi non sono sicuro se stai anche chiedendo se va bene indicizzare tutte le chiavi esterne. "* – Kev