Det er lige meget om de er oprettet via et T-SQL Script eller via Designeren. Dit spørgsmål er lidt tvetydigt, så jeg er usikker på, om du også spørger, om det er i orden at indeksere alle fremmednøglerne. Men hvis du er det, bør der oprettes indekser på kolonner, der ofte refereres til i forespørgsler, og du kan gøre følgende for at forbedre ydeevnen:
-
Kør guiden til databasejustering, som vil give en oversigt over forbedringer og anbefale indekser.
-
Indekser alle fremmednøgler og kør eksekveringsplanen (for at se, om forespørgsler udføres hurtigere eller langsommere).
For at oprette et indeks via T-SQL
:
CREATE INDEX IX_INDEX_NAME
ON Table (FieldName);
For at få en liste over alle fremmednøgler:
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
For at generere et script, der anvender indekser på tværs af alle fremmednøgler, kan du gøre dette:
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