2016-12-03 5 views
3

Was ist Ihrer Meinung nach besser? Aktualisieren Sie jedes Mal alle Spalten einer Tabelle, auch wenn nicht alle Werte geändert wurden, oder aktualisieren Sie nur die geänderten Spalten mit mehreren Aktualisierungen. Die Idee ist, nicht jede einzelne Änderung sofort zu aktualisieren, auf einige Änderungen zu warten und dann alle Spalten zu aktualisieren, aber ich möchte keine Logik implementieren, die bestimmt, welche Spalten geändert wurden.Ist es effizienter, ein Update mit mehreren Spalten im Vergleich zu mehreren Updates auszuführen

UPDATE myTable 
SET col1 = newVal1, 
    col2 = oldVal2, 
    col3 = newVal3, 
    ... 
WHERE x = y 

gegen

UPDATE myTable SET col1 = newVal1 WHERE x = y 
UPDATE myTable SET col3 = newVal3 WHERE x = y 
... 

ich SQL Server 2014 Express verwenden.

Antwort

5

Die erste Abfrage wird viel besser, weil es nur eine einzige auf dem Tisch tun muss. Aber in der ersten Abfrage können Sie die Spalte aktualisieren, die neuen Werte muss aktualisiert werden:

UPDATE myTable 
SET col1 = newVal1, 
    col3 = newVal3, 
... 
where x = y 

aber die zweite Abfrage muss für jeden Update die Tabelle scan/seek, die mehr Zeit als die erste Abfrage stattfinden werden.

1

Ein Update ist besser. Aber das ist wirklich eine Frage der Semantik, die Sie in Ihrem Code implementieren möchten. Hier sind zwei wichtige Fragen:

  • Möchten Sie den neuen Wert einer Spalte für andere Benutzer der Tabelle sofort verfügbar sein?
  • Müssen die beiden Werte "zur gleichen Zeit" geändert werden, damit die Daten konsistent bleiben?

Im ersten Fall können Sie Updates in separaten Transaktionen trennen.

Im zweiten Fall möchten Sie alle Aktualisierungen in einer einzigen Transaktion durchführen, idealerweise in einer einzigen Anweisung.

Für die Leistung ist ein einzelnes Update schneller. Ein Index auf x oder y (was auch immer die tatsächliche Spalte in der Tabelle ist) würde alle Versionen der Abfrage beschleunigen.

Verwandte Themen