UPDATE-oder MERGE-von sehr großen Tabellen in SQL Server

Ich ausführen muss, um einen täglichen update von einer sehr großen (300 Datensätze) und breiten TABLE1. Die Quelle der Daten für die updates befindet sich in einer anderen Tabelle UTABLE 10%-25% der Zeilen von TABLE1 aber ist eng. Beide Tabellen haben record_id als Primärschlüssel.

Derzeit, ich bin Neuerstellung TABLE1 mit dem folgenden Ansatz:

<!-- language: sql -->
    1) SELECT (required columns) INTO TMP_TABLE1 
    FROM TABLE1 T join UTABLE U on T.record_id=U.record_id  
    2) DROP TABLE TABLE1  
    3) sp_rename 'TMP_TABLE1', 'TABLE1'

Aber das dauert fast 40 Minuten auf meinem server (60GB RAM für SQL Server). Ich möchte erreichen, die eine 50% performance-Gewinn, - welche anderen Möglichkeiten kann ich ausprobieren?

  1. MERGE und UPDATE - so etwas wie der code unten funktioniert schneller, nur für einen sehr kleinen UTABLE Tabelle in voller Größe, alles hängt nur:

    <!-- language: SQL -->
    MERGE TABLE1 as target  
    USING UTABLE as source  
    ON target.record_id = source.record_id   
      WHEN MATCHED THEN   
        UPDATE SET Target.columns=source.columns
  2. Hörte ich, dass ich einen batch ausführen SERIENDRUCK mithilfe ROWCOUNT - aber ich glaube nicht, dass es sein kann, schnell genug für einen 300M Zeile der Tabelle.

  3. Jede SQL-Abfrage-Tipps, die hilfreich sein können?

  • Kannst du die Abfrage-plan?
  • Hi @chris, query plan ist genial einfach: 1 Scannen der Tabelle "TABELLE1", 2 Table Scan UTABLE, 3 - HASH-JOIN, 4 ZUSAMMENFÜHREN. Ersten und Letzten Schritt nehmen 90% der Zeit. Aber ich habe schon verstanden, wie meine Frage - siehe meine eigene Antwort.
Schreibe einen Kommentar