Няма значение дали са създадени чрез T-SQL скрипт или чрез дизайнера. Въпросът ви е малко двусмислен, така че не съм сигурен дали вие също питате дали е добре да индексирате всички външни ключове. Ако обаче сте, трябва да се създават индекси върху колони, които се препращат често в заявки, и можете да направите следното, за да подобрите производителността:
-
Стартирайте съветника за настройка на база данни, който ще предостави обобщение на подобренията и ще препоръча индекси.
-
Индексирайте всички външни ключове и стартирайте плана за изпълнение (за да видите дали заявките се изпълняват по-бързо или по-бавно).
За да създадете индекс чрез T-SQL
:
CREATE INDEX IX_INDEX_NAME
ON Table (FieldName);
За да получите списък с всички външни ключове:
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
За да генерирате скрипт, който прилага индекси към всички външни ключове, можете да направите следното:
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