Wie und wann wird SLEEP () in MySQL richtig verwendet?

72

In Bezug auf meine andere Frage heute frage ich mich, wie ich MySQLsSLEEP(duration) richtig verwenden soll.

Nach dem, was ich beim Lesen von MySQL Dev-Foren und einer sehr vagen Beschreibung in MySQL Docs gesammelt habe, kann ich es nicht so verwenden:

SELECT ...
SLEEP(1); /* wait for a second before another SELECT */
SELECT ...

Wofür ist es dann gut?

Michal M.
quelle
6
Basierend auf dem Lesen der MySQL-Dokumente hätte ich es zuerst auf Ihre Weise versucht. Ich scheine nach dem Lesen der MySQL-Dokumente nie mit nützlichen Informationen davonzukommen, danke an Konerak unten für die sehr einfache Antwort ...
Landon
@ Landon, die Antwort von Iroh ist die bessere.
Pacerier

Antworten:

91
SELECT ...
SELECT SLEEP(5);
SELECT ...

Aber wofür benutzt du das? Versuchen Sie, Mutexe oder Transaktionen zu umgehen / neu zu erfinden?

Konerak
quelle
46
Ich verwende diesen Befehl, um zu bestätigen, dass die langsame Abfrageprotokollierung ordnungsgemäß funktioniert.
Jeffatrackaid
6
Sollte auch nützlich sein, um asynchrone Abfragen auf der Anwendungsebene zu testen.
Programster
2
@MicalM Es gibt keinen Grund, die "akzeptierte" Antwort neu zuzuweisen. Diese Antwort ist auch richtig und war es 5 Jahre lang, bevor ich mich einmischte. Ich habe gerade die andere hinzugefügt, weil ich dachte, dass sie der gestellten Frage einen Mehrwert verleiht.
Onkel Iroh
Ich verwende diesen Befehl, damit der Dump-Import erst nach Abschluss der Skriptdekomprimierung gestartet wird. Es hat einige Zeit gedauert, als ich letzte Nacht geschlafen habe.
MatrixManAtYrService
86

Wenn Sie nicht möchten, SELECT SLEEP(1);können Sie dies auch DO SLEEP(1); in Situationen tun, in denen die Ausgabe nicht angezeigt werden soll.

z.B

SELECT ...
DO SLEEP(5);
SELECT ...
Onkel Iroh
quelle
7
Dies sollte die akzeptierte Antwort sein. Die Ausgabe von sleepist immer 0, warum sollte sich jemand die Mühe machen, die Ausgabe von sleepfür .....
Pacerier
1
@ Pacerier: Diese Antwort erschien 5 Jahre später, aber das Beispiel verwendet DO, das in der Tat eleganter als SELECT ist. Der große Hinweis war, dass SLEEP selbst kein Befehl war, sondern eine Funktion, die beide Antworten zeigen, aber Sie können diese Antwort gerne als akzeptiert markieren.
Konerak
2
@Pacerier Ein Grund für die Auswahl der Schlafausgabe besteht darin, sie in eine Abfrage einzufügen, um beispielsweise die Sperr- und Transaktionsisolationsstufen bei gleichzeitigen Abfragen zu testen.
Barry Kelly
Wenn Sie die Ausgabe nicht sehen möchten, können Sie eine Join- oder gefälschte verschachtelte Abfrage hinzufügen, z. B.: Wählen Sie 1 aus (wählen Sie sleep (1)) a;
Martin
@ Pacerier Falsch. Es kann ausgeben 1. dev.mysql.com/doc/refman/8.0/en/…
Cleroth