0

Dies haben die Geschichte:Web-Transaktionen SQL-Performance und Genauigkeit Ausgabe

Wenn zwei gleichzeitiger Rückzug sind $ 10 im selben Konto und das Konto hat insgesamt nur 10 $.

Ergebnis: beide Rückzug Erfolg, Kontostand ist - 10 $.

Wenn ich machen die Abfrage wie folgt:

UPDATE table 
SET amount = amount - 10 
WHERE (amount-10 > 0) AND id = 123; 

wird es sicher und genau sein, nur eines der zieht sich zurück will Erfolg.

Gibt es Leistungsprobleme, da der Betrag nicht indiziert werden kann?

+1

Sie haben wahrscheinlich bereits einen Primärschlüssel in Ihrer ID-Spalte. Sie benötigen keine weiteren Indizes in dieser Abfrage. –

Antwort

0

Schreiben Sie die Abfrage wie:

UPDATE table 
    SET amount = amount - 10 
    WHERE amount > 10; 

Dann kann ein Index verwendet werden. Ich glaube Sie die update nur auf das angegebene Konto beschränken sollen:

UPDATE table 
    SET amount = amount - 10 
    WHERE account = @account AND amount > 10; 

Dann wird ein Index auf account kann immer verwendet werden.

+0

Oh, noch eine Frage. ist diese Abfrage UPDATE-Tabelle SET-Betrag = Menge - 10 WHERE Betrag> 10 UND account = @account; wie UPDATE-Tabelle SET-Betrag = Betrag - 10 WHERE Konto = @account UND Menge> 10; – user3581646

+0

@ user3581646. . . Ja, sie sind gleich. –

+0

Ich nehme Rolands Kommentar über Gordons Antwort. Aber nur wenn "id" die PK ist. –

Verwandte Themen