Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

sql server:crie índices em chaves estrangeiras quando necessário


Não importa se eles são criados por meio de um script T-SQL ou por meio do Designer. Sua pergunta é um pouco ambígua, então não tenho certeza se você também está perguntando se pode indexar todas as chaves estrangeiras. No entanto, se estiver, os índices devem ser criados em colunas que são referenciadas com frequência em consultas e você pode fazer o seguinte para melhorar o desempenho:

  • Execute o assistente de ajuste de banco de dados que fornecerá um resumo de melhorias e índices recomendados.

  • Indexe todas as chaves estrangeiras e execute o plano de execução (para ver se as consultas estão sendo executadas mais rapidamente ou mais lentamente).

Para criar um índice via T-SQL :
CREATE INDEX IX_INDEX_NAME
ON Table (FieldName); 

Para obter uma lista de todas as chaves estrangeiras:
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 gerar um script que aplique índices em todas as chaves estrangeiras, você pode fazer isso:
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