Nezáleží na tom, zda jsou vytvořeny pomocí skriptu T-SQL nebo pomocí Návrháře. Vaše otázka je trochu nejednoznačná, takže si nejsem jistý, zda se také ptáte, zda je v pořádku indexovat všechny cizí klíče. Pokud však ano, indexy by měly být vytvořeny na sloupcích, na které se v dotazech často odkazuje, a pro zlepšení výkonu můžete provést následující:
-
Spusťte průvodce laděním databáze, který poskytne souhrn vylepšení a doporučí indexy.
-
Indexujte všechny cizí klíče a spusťte plán provádění (Chcete-li zjistit, zda se dotazy provádějí rychleji nebo pomaleji).
Chcete-li vytvořit index pomocí T-SQL
:
CREATE INDEX IX_INDEX_NAME
ON Table (FieldName);
Chcete-li získat seznam všech cizích klíčů:
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
Chcete-li vygenerovat skript, který použije indexy pro všechny cizí klíče, můžete provést toto:
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