Het maakt niet uit of ze zijn gemaakt via een T-SQL-script of via de Designer. Uw vraag is een beetje dubbelzinnig, dus ik weet niet zeker of u ook vraagt of het oké is om alle externe sleutels te indexeren. Als u dat wel bent, moeten er indexen worden gemaakt op kolommen waarnaar vaak wordt verwezen in query's en kunt u het volgende doen om de prestaties te verbeteren:
-
Voer de wizard voor het afstemmen van de database uit, die een samenvatting van verbeteringen geeft en indexen aanbeveelt.
-
Indexeer alle externe sleutels en voer het uitvoeringsplan uit (om te zien of query's sneller of langzamer worden uitgevoerd).
Een index maken via T-SQL
:
CREATE INDEX IX_INDEX_NAME
ON Table (FieldName);
Om een lijst van alle buitenlandse sleutels te krijgen:
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
Om een script te genereren dat indexen toepast op alle externe sleutels, kunt u dit doen:
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