CASE vs Mehrere UPDATE-Abfragen für große Datensätze - Leistung

8

Für die Leistung welche Option wäre besser für große Datensätze, die aktualisiert werden sollen?

Verwenden Sie eine CASE-Anweisung oder einzelne Aktualisierungsabfragen?

CASE Beispiel:

%Vor%

Beispiel für eine individuelle Abfrage:

%Vor%

HINWEIS: Ungefähr 300.000 Datensätze werden aktualisiert, und die CASE-Anweisung würde ungefähr 10.000 WHEN-Bedingungen aufweisen. Wenn die einzelnen Abfragen verwendet werden, sind es auch 10.000.

    
Phill Pafford 26.03.2012, 15:38
quelle

3 Antworten

13

Die CASE version.

Dies liegt daran, dass die Wahrscheinlichkeit groß ist, dass Sie dieselbe Zeile mehrfach mit den einzelnen Anweisungen ändern. Wenn Zeile 10 sowohl condition_1 als auch condition_y hat, muss sie zweimal gelesen und geändert werden. Wenn Sie einen Clustered-Index haben, bedeutet dies, dass zwei Clustered-Index-Updates zu dem gehören, was auch immer die anderen Felder waren, die geändert wurden.

Wenn Sie es als eine einzelne Anweisung tun können, wird jede Zeile nur einmal gelesen und es sollte viel schneller laufen.

Ich habe vor etwa einem Jahr einen ähnlichen Prozess geändert, bei dem Dutzende von UPDATE -Anweisungen hintereinander verwendet wurden, um einen since UPDATE mit CASE zu verwenden und die Verarbeitungszeit um etwa 80% gesunken ist.

    
JNK 26.03.2012, 15:43
quelle
0

Es scheint mir logisch, dass SQL Server bei der ersten Option die Tabelle nur einmal durchlaufen wird und für jede Zeile die Bedingung auswertet.

Bei der zweiten muss es 4 mal durch alle Tabellen gehen

Für eine Tabelle mit 1000 Zeilen sprechen wir also bei der ersten Option im besten Fall von 1000 Bewertungen und im schlimmsten Fall von 3000. Auf der zweiten haben wir immer 4000 Auswertungen

Also wäre Option 1 schneller.

    
Diego 26.03.2012 15:47
quelle
0

Wie von Mitch aufgezeigt, versuchen Sie, eine temporäre Tabelle zu erstellen, die alle benötigten Daten enthält. Erstellen Sie für jede Spalte (Feld), die Sie ändern möchten, eine andere temporäre Tabelle. Sie sollten der / den temporären Tabelle (n) auch einen Index hinzufügen, um die Leistung zu verbessern.

Auf diese Weise wird Ihre Update-Anweisung (mehr oder weniger):

%Vor%

und so weiter ..

Dies sollte Ihnen eine gute Leistung geben, wenn Sie gleichzeitig große Mengen von Updates hochskalieren.

    
Seph 27.03.2012 05:36
quelle