sql >> Database >  >> RDS >> Sqlserver

UPDATE of SAMENVOEGEN van zeer grote tabellen in SQL Server

Eigenlijk heb ik algemene aanbevelingen voor dergelijke zoekopdrachten ontdekt:het idee om SQL Merge of Update te gebruiken is heel slim, maar het mislukt wanneer we veel records moeten bijwerken (d.w.z. 75M ) in een grote en brede tafel (d.w.z. 240M ).

Als we naar het zoekplan van de onderstaande zoekvraag kijken, kunnen we zeggen dat TABLE SCAN van TABEL1 en laatste MERGE nemen 90% van de tijd in beslag.

MERGE TABLE1 as Target  
USING UTABLE as source  
ON Target.record_id = source.record_id   
WHEN MATCHED AND (condition) THEN   
    UPDATE SET Target.columns=source.columns

Dus om MERGE te gebruiken, moeten we:

  1. Verminder het aantal rijen dat we nodig hebben om bij te werken en geef deze informatie correct door aan SQL Server. Dit kan gedaan worden door UTABLE . te maken kleiner of specificeren van aanvullende condition dat vernauwt het samen te voegen deel.
  2. Zorg ervoor dat het samen te voegen deel in het geheugen past, anders verloopt de query veel langzamer. TABLE1 maken twee keer minder verminderde mijn werkelijke zoektijd van 11 uur naar 40 minuten.

Zoals Mark al zei, kun je UPDATE . gebruiken syntaxis en gebruik WHERE clausule om het samen te voegen deel te verkleinen - dit geeft dezelfde resultaten. Vermijd ook het indexeren van TABLE1 omdat dit extra werk zal veroorzaken om de index opnieuw op te bouwen tijdens MERGE



  1. mysql left join geeft niet alle linkertabelrij terug

  2. Eenvoudige manier om één record uit MySQL te lezen

  3. hoe alleen even of oneven rijen in SQL Server 2008 te tonen?

  4. één artikel in meerdere categorieën