sql >> Databasteknik >  >> RDS >> Sqlserver

UPPDATERING eller SAMMANSLUTNING av mycket stora tabeller i SQL Server

Jag har faktiskt fått reda på allmänna rekommendationer för en sådan fråga:Idén att använda SQL Merge eller Update är väldigt smart men den misslyckas när vi behöver uppdatera många poster (dvs 75M ) i ett stort och brett bord (dvs 240M ).

Om vi ​​tittar på frågeplanen för frågan nedan kan vi säga att TABLE SCAN av TABELL1 och slutlig MERGE tar 90 % av tiden.

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

Så för att kunna använda MERGE måste vi:

  1. Minska antalet rader vi behöver för att uppdatera och skicka denna information korrekt till SQL Server. Detta kan göras genom att göra UTABLE mindre eller anger ytterligare condition som begränsar den del som ska slås samman.
  2. Se till att den del som ska slås samman passar i minnet annars går frågan mycket långsammare. Gör TABLE1 två gånger mindre minskade min verkliga frågetid från 11 timmar till 40 minuter.

Som Mark nämnde kan du använda UPDATE syntax och använd WHERE klausul till smal del som ska slås samman - detta ger samma resultat. Undvik också att indexera TABLE1 eftersom detta kommer att orsaka ytterligare arbete med att bygga om index under MERGE



  1. Använda en variabel för tabellnamnet i "Från"-satsen i SQL Server 2008

  2. SQL-syntax för uppdateringsfråga med anslutning av föregående

  3. C# Databasabstraktion för Microsoft SQL Server, Oracle, MySQL och DB2

  4. PostgreSQL User Group NL