2017-06-15 3 views
1

Wäre jemand neu in SQL, würde jemand einen schnelleren Weg der Durchführung der folgenden Updates wissen?Auf der Suche nach einem schnelleren Weg, um viele Spalten in SQL-Tabelle zu aktualisieren

Vielleicht mit einem Array oder für jedes Element.

update ItemDynamic 
set price = SnapShotPrice 
where SnapShotPrice <> Price 

update ItemDynamic 
Set PriceLevelA = SnapShotPriceA 
where snapshotpriceA <> PricelevelA 

update ItemDynamic 
Set PriceLevelB = SnapshotpriceB 
where snapshotpriceB <> PricelevelB 

update ItemDynamic 
Set PriceLevelC = SnapshotpriceC 
where snapshotpriceC <> PricelevelC 
+0

Sie heißen Indizes. SSMS enthält einen Abfrageanalysator, der Indizes zum Hinzufügen vorschlagen kann. Du solltest es benutzen. – Will

+1

Update-Anweisungen 3 und 4 scheinen identisch zu sein. Ist das richtig? –

Antwort

4

Sie könnten dies in einer einzigen Update-Anweisung tun. Etwas wie das.

Nicht wirklich sicher, was der Punkt Ihrer vierten Update-Anweisung ist, weil es identisch mit der dritten ist.

+0

Wenn keine der beteiligten Spalten NULL-Werte haben, kann dies weiter vereinfacht werden zu 'SET Price = SnapshotPrice' usw. Es ist erwähnenswert, dass die Anweisung in dieser Form jede Zeile bedingungslos (wenn auch nur idempotent) aktualisiert, während das Original Aussagen nicht. Dies kann oder kann nicht schneller sein, abhängig von Indizes und Datenverteilung. –

+0

Ich überlegte, die Prädikate hinzuzufügen, um die Zeilen zu begrenzen, die aktualisiert werden, aber das würde sehr wahrscheinlich langsamer sein, da es mehrere nicht gleich Prädikate geben würde. Angesichts der unglaublich vagen Frage wollte ich nur darauf hinweisen, dass es in einer einzigen Aussage statt in 3 (oder 4) möglich wäre. –

+0

Verstanden, aber wie das Original speziell für "schneller" (die für alle, die wir wissen, möglicherweise nur "weniger Code") gefragt, fühlte ich mich verpflichtet, darauf hinzuweisen, dass die Laufleistung dieser Lösung variieren kann. Insbesondere sind Leute oft überrascht, dass ein Update der Form 'SET Column = Column' * nicht * ein No-Op ist, das keine Daten schreibt. –

Verwandte Themen