No importa si se crean a través de un script de T-SQL o mediante el Diseñador. Su pregunta es un poco ambigua, por lo que no estoy seguro si también está preguntando si está bien indexar todas las claves foráneas. Sin embargo, si usted es, los índices deben crearse en las columnas que se hace referencia con frecuencia en las consultas y se puede hacer lo siguiente para mejorar el rendimiento:
Ejecutar el Asistente para ajuste de la base de datos que suministrará un resumen de las mejoras y recomendar índices .
Indexe todas las claves foráneas y ejecute el plan de ejecución (para ver si las consultas se realizan más rápido o más despacio).
para crear un índice a través de T-SQL
:
CREATE INDEX IX_INDEX_NAME
ON Table (FieldName);
Para obtener una lista de todas las claves externas:
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
Para generar una secuencia de comandos que se aplica índices en todas las claves externas que podría haz esto:
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
creo que es necesario para aclarar su pregunta, consulte esta observación en la respuesta de Darren: * "Su pregunta es un poco ambigua , así que no estoy seguro si también está preguntando si está bien indexar todas las claves foráneas. "* – Kev