sql >> Database teknologi >  >> RDS >> Sqlserver

sql server:opret indekser på fremmede nøgler, hvor det er nødvendigt

Det er lige meget om de er oprettet via et T-SQL Script eller via Designeren. Dit spørgsmål er lidt tvetydigt, så jeg er usikker på, om du også spørger, om det er i orden at indeksere alle fremmednøglerne. Men hvis du er det, bør der oprettes indekser på kolonner, der ofte refereres til i forespørgsler, og du kan gøre følgende for at forbedre ydeevnen:

  • Kør guiden til databasejustering, som vil give en oversigt over forbedringer og anbefale indekser.

  • Indekser alle fremmednøgler og kør eksekveringsplanen (for at se, om forespørgsler udføres hurtigere eller langsommere).

For at oprette et indeks via T-SQL :

CREATE INDEX IX_INDEX_NAME
ON Table (FieldName); 

For at få en liste over alle fremmednøgler:

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

For at generere et script, der anvender indekser på tværs af alle fremmednøgler, kan du gøre dette:

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. Indsættelse af strenge i MySQL

  2. Håndtering af langsomme forespørgsler med PostgreSQL

  3. SQL Server 2008 R2 sidder fast i enkeltbrugertilstand

  4. MySQL - hent en værdi fra en anden tabel, hvis kolonnen er null