Rolf B: SQL-Abfrage Effizienz? Strategieänderung

Beitrag lesen

Hallo Raketenwilli,

was Du da beschreibst, nennt sich "optimistisches Sperrverfahren" und lässt sich am einfachsten mit einer "last_update" oder "last_version" Spalte je Table lösen. In last_update steht der Timestamp des letzten Update, in last_version ein Zähler, der bei jedem Update inkrementiert wird (und gerne nach einer geeigneten[1] Zahl von Updates neu starten kann).

Diese Spalte kann man wiederum mit einem Trigger pflegen. Man muss sich beim SELECT den last_xxx Wert merken und bei UPDATE und ggf. auch DELETE das WHERE last_xxx = :last_xxx hinzufügen.

Ein expliziter Test aller Spalten auf "geändert" ist zerbrechlicher und aufwändiger Code. Vom Tempo will ich nicht reden, das ist vermutlich vernachlässigbar. Man muss aber stets die Alt-Werte aller Spalten in den Update geben, und man muss beim Hinzufügen/Entfernen von Spalten sämtliche Update-Statements für diese Tabelle anpassen. Ein Repository bzw. ein ORM-Framework kann das kapseln, aber es ist dennoch ordentlich Arbeit.

Rolf

--
sumpsi - posui - obstruxi

  1. Eignungskriterium ist die Updatefrequenz und die erwartete Dauer, die eine Application einen Datensatz im Speicher hält ↩︎