Mir ist nicht ganz klar warum der Tausch optimiert werden muss?
Wenn im Normalfall keine negativen Werte vorkommen, vieleicht so:
Code:
UPDATE tabelle SET spalte = -spalte WHERE (id = 3) OR (id = 4);
UPDATE tabelle SET spalte = spalte + 3 + 4 WHERE (id < 0);
Da diese Spalte scheinbar nur eine Sortierreihenfolge darstellt, könnte man diese mit ID(FK auf Haupttabelle) in eine zusätzliche Tabelle auslagern. Zum Sortieren alle zu ändernden Einträge löschen und neu eintragen.
Sind die zu ändernden Datensätze immer Teil einer Identität(Master/Detail), die vor Schreibzugriff auf die Detaildatensätze innerhalb der Transaktion sowieso gesperrt wird, so kann auf die Eindeutigkeit verzichtet werden. Der Geschwindigkeitsunterschied ist sicherlich vernachlässigbar.