Det spelar ingen roll om de skapas via ett T-SQL-skript eller via Designern. Din fråga är lite tvetydig, så jag är osäker på om du också frågar om det är okej att indexera alla främmande nycklar. Men om du är det, bör index skapas på kolumner som refereras ofta till i frågor och du kan göra följande för att förbättra prestandan:
-
Kör guiden för inställning av databasen som ger en sammanfattning av förbättringar och rekommenderar index.
-
Indexera alla främmande nycklar och kör exekveringsplanen (för att se om frågorna fungerar snabbare eller långsammare).
För att skapa ett index via T-SQL
:
CREATE INDEX IX_INDEX_NAME
ON Table (FieldName);
För att få en lista över alla främmande nycklar:
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
För att skapa ett skript som tillämpar index över alla främmande nycklar kan du göra så här:
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