Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

sql server:crea indici su chiavi esterne dove necessario

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