Nie ma znaczenia, czy są tworzone za pomocą skryptu T-SQL, czy za pomocą Designera. Twoje pytanie jest trochę niejednoznaczne, więc nie jestem pewien, czy pytasz również, czy indeksowanie wszystkich kluczy obcych jest w porządku. Jeśli jednak tak jest, indeksy powinny być tworzone na kolumnach, do których często się odwołują w zapytaniach, i możesz wykonać następujące czynności, aby poprawić wydajność:
-
Uruchom kreatora dostrajania bazy danych, który dostarczy podsumowanie ulepszeń i zarekomenduje indeksy.
-
Zindeksuj wszystkie klucze obce i uruchom plan wykonania (aby sprawdzić, czy zapytania działają szybciej czy wolniej).
Aby utworzyć indeks za pomocą 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 zastosuje indeksy do wszystkich kluczy obcych, możesz to zrobić:
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