Vermeiden von Sperren mit MySQL-Abfragen
In MySQL können bestimmte Abfragen Sperren verursachen, was zu Leistungsproblemen führt, insbesondere wenn die Tabelle häufig abgefragt wird geändert. Um dies zu beheben, stellt sich die Frage: Gibt es eine Möglichkeit, eine Select-Anweisung auszuführen, ohne Sperren zu induzieren?
Die ursprüngliche Abfrage in Frage:
SELECT COUNT(online.account_id) cnt from online;
sperrt die Tabelle aufgrund des parallelen Ereignisses auch die Tabelle ändern. Die Frage untersucht mögliche Alternativen.
Eine mögliche Lösung, die in den Antworten erwähnt wird, besteht darin, die Transaktionsisolationsstufe auf READ-UNCOMMITTED zu setzen. Dieser Ansatz ist jedoch nicht ideal für Slave-Datenbanken, da er mit der binären Protokollierung im STATEMENT-Modus nicht kompatibel ist.
Ein alternativer Ansatz, der mit Slave-Datenbanken kompatibel ist, ist die Verwendung der folgenden Syntax:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; SELECT * FROM TABLE_NAME ; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;
Diese Methode deaktiviert effektiv Sperren für die Dauer der select-Anweisung. Es ist jedoch wichtig zu beachten, dass dies zu nicht deterministischen Ergebnissen führen kann.
Ein weiterer Vorschlag ist die Verwendung der folgenden Syntax:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; SELECT * FROM TABLE_NAME ; COMMIT ;
Diese Option deaktiviert auch Sperren für die Dauer des select-Anweisung und stellt sicher, dass während des Isolationszeitraums vorgenommene Änderungen sofort übernommen werden. Es ist zu beachten, dass dieser Ansatz im Vergleich zur vorherigen Methode Auswirkungen auf die Leistung haben kann. Darüber hinaus ist es nicht erforderlich, die Isolationsstufe explizit auf REPEATABLE READ zurückzusetzen, da sie beim Festschreiben automatisch zurückgesetzt wird.
Durch die Verwendung dieser Ansätze ist es möglicherweise möglich, Sperren bei der Ausführung ausgewählter Abfragen in MySQL zu vermeiden Verbesserung der Leistung und Reduzierung von Konflikten. Bei der Wahl der geeigneten Methode ist es jedoch wichtig, die möglichen Kompromisse und Auswirkungen auf die Datengenauigkeit und -konsistenz zu berücksichtigen.
Das obige ist der detaillierte Inhalt vonWie kann ich SELECT-Anweisungen in MySQL ausführen, ohne Sperren zu verursachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!