sql >> Databasteknik >  >> RDS >> Sqlserver

sql-server:skapa index på främmande nycklar där det behövs

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



  1. Hämta data från sql-databasen och visa i tabeller - Visa viss data enligt kryssrutor som är markerade

  2. Produktprisjämförelse i sql

  3. MySQL - Snabbaste sättet att kontrollera om data i InnoDB-tabellen har ändrats

  4. Vad är det för fel på mitt CASE?