sql >> Base de Datos >  >> RDS >> Sqlserver

servidor sql:cree índices en claves externas cuando sea necesario

No importa si se crean a través de un T-SQL Script o a través del 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 externas. Sin embargo, si es así, los índices deben crearse en las columnas a las que se hace referencia con frecuencia en las consultas y puede hacer lo siguiente para mejorar el rendimiento:

  • Ejecute el asistente de ajuste de la base de datos que proporcionará un resumen de las mejoras y los índices recomendados.

  • Indexe todas las claves foráneas y ejecute el plan de ejecución (para ver si las consultas funcionan más rápido o más lento).

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 foráneas:

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 un script que aplique índices a todas las claves foráneas, podría hacer 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