Nie ma znaczenia, czy są tworzone za pomocą skryptu T-SQL lub za pośrednictwem Projektanta. Twoje pytanie jest trochę niejednoznaczne, więc nie jestem pewien, czy pytasz również, czy można indeksować wszystkie klucze obce. Jednakże, jeśli jesteś, indeksy powinny być tworzone na kolumnach, do których odwołuje się często w zapytaniach i można wykonać następujące czynności w celu zwiększenia wydajności:
uruchomić kreatora strojenia bazy danych, która będzie dostarczać podsumowanie ulepszeń i polecam indeksów .
Indeksuj wszystkie klucze obce i uruchom plan wykonania (Aby sprawdzić, czy zapytania działają szybciej lub wolniej).
Aby utworzyć indeks poprzez T-SQL
:
CREATE INDEX IX_INDEX_NAME
ON Table (FieldName);
Aby uzyskać listę wszystkich kluczy obcych:
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
Aby wygenerować skrypt, który stosuje indeksy we wszystkich kluczy obcych mogłeś zrób to:
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
Chyba trzeba wyjaśnić swoje pytanie, zobaczyć tę obserwację w odpowiedzi Darrena: * "Twoje pytanie jest trochę niejednoznaczne , więc nie jestem pewien, czy pytasz również, czy można indeksować wszystkie klucze obce. "* – Kev