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.
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.
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.
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.
Tags und Links sql postgresql performance case sql-update