sql >> Database >  >> RDS >> Sqlserver

sql-server:maak waar nodig indexen op externe sleutels

Het maakt niet uit of ze zijn gemaakt via een T-SQL-script of via de Designer. Uw vraag is een beetje dubbelzinnig, dus ik weet niet zeker of u ook vraagt ​​of het oké is om alle externe sleutels te indexeren. Als u dat wel bent, moeten er indexen worden gemaakt op kolommen waarnaar vaak wordt verwezen in query's en kunt u het volgende doen om de prestaties te verbeteren:

  • Voer de wizard voor het afstemmen van de database uit, die een samenvatting van verbeteringen geeft en indexen aanbeveelt.

  • Indexeer alle externe sleutels en voer het uitvoeringsplan uit (om te zien of query's sneller of langzamer worden uitgevoerd).

Een index maken via T-SQL :

CREATE INDEX IX_INDEX_NAME
ON Table (FieldName); 

Om een ​​lijst van alle buitenlandse sleutels te krijgen:

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

Om een ​​script te genereren dat indexen toepast op alle externe sleutels, kunt u dit doen:

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. Hoe Array/Table Parameter te gebruiken voor Oracle (ODP.NET 10g) via ADO.NET/C#?

  2. ORA-27101:gedeelde geheugenwereld bestaat niet

  3. Kilometerstand van voertuigen berekenen door af te trekken van voertuigmetingen

  4. Onbekende kolom 'Extent1.Discriminator' in 'where-clausule'