2010-07-13 3 views
10

Ich ging durch einen Code und bemerkte, dass UPDATE LOW_PRIORITY und DELAYED INTO zum Einfügen und Aktualisieren der Datenbank verwendet. Was ist die Verwendung dieses Codes? Warum müssen wir das benutzen?Vorteile von UPDATE LOW_PRIORITY und INSERT DELAYED IN

irgendwelche Ideen ??

Muss ich es bei jeder Einfügung und Aktualisierung für verschiedene Tabellen in derselben Datenbank verwenden?

Antwort

19

Mit dem Schlüsselwort LOW_PRIORITY wird die Ausführung des UPDATE so lange verzögert, bis keine anderen Clients mehr aus der Tabelle lesen. Normalerweise werden Leseklienten angehalten, bis die Aktualisierungsabfrage abgeschlossen ist. Wenn Sie den Leseklienten Vorrang vor der Aktualisierungsabfrage geben möchten, sollten Sie LOW_PRIORITY verwenden. Die Option DELAYED für die INSERT-Anweisung ist eine MySQL-Erweiterung für Standard-SQL, die sehr nützlich ist, wenn Sie Clients haben, die nicht auf den Abschluss des INSERT warten müssen oder müssen. Dies ist eine häufige Situation, wenn Sie MySQL für die Protokollierung verwenden und Sie regelmäßig SELECT- und UPDATE-Anweisungen ausführen, deren Ausführung sehr lange dauert.

+13

Hinweis: Ab MySQL 5.6.6 ist INSERT DELAYED veraltet und wird in 5.7 entfernt. – Petah

0

Wenn Ihre UPDATEs auf MySQL eine leseintensive Umgebung bis zu 1800 Sekunden dauern, ist es ratsam, den UPDATE LOW_PRIORITY zu verwenden.

+4

Warum 1800 Sekunden? Du hättest deine Argumentation erklären können. –

+0

@Dharma sprach über _ [wait_timeout] (http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_wait_timeout) _ und _ [interactive_timeout] (http: // dev.mysql.com/doc/refman/5.6/en/server-variables.html#sysvar_interactive_timeout)_ Systemvariablen, die vom _CLIENT_INTERACTIVE_ Flag des Clients abhängen. Der Standardwert dieser Variablen ist 28800 (8 Stunden) und nicht 1800. –

-1

Diese Notwendigkeit zu verwenden, dann haben Sie große Last auf Server. Und jetzt, dass einige UPDATE oder INSERT ist jetzt höchste Priorität und die kann auf Last handeln.

Exp. SQL, die einige Statistiken oder Elemente oben generieren. Die sind langsam und müssen nicht sofort ausgeführt werden.

7

LOW_PRIORITY, HIGH_PRIORITY und DELAYED sind nur in wenigen Fällen nützlich. Wenn Sie keine große Ladung haben, können sie Ihnen nicht helfen. Wenn Sie etwas tun, tun Sie nichts, was Sie nicht vollständig verstehen.

Alle diese otpions funktionieren nur mit MyISAM, nicht InnoDB, nicht Ansichten.

DELAYED funktioniert nicht mit partitionierten Tabellen, und es ist eindeutig für Dataware House konzipiert. Der Client sendet die Einfügung und vergisst sie dann, ohne auf das Ergebnis zu warten. Sie werden also nicht wissen, ob die Einfügung erfolgreich war, ob es doppelte Werte usw. gab. Sie sollte niemals verwendet werden, während andere Threads SELECT aus dieser Tabelle verwenden konnten, weil ein verzögertes Einfügen niemals gleichzeitig erfolgt.

LOW_PRIORITY wartet, bis kein Client auf die Tabelle zugreift. Aber wenn Sie viel Verkehr haben, können Sie warten, bis die Verbindung ausläuft ... das ist nicht, was Sie wollen, nehme ich an :)

Beachten Sie auch, dass DELAYED in Oracle MySQL 5.7 entfernt wird (aber nicht in MariaDB).

Verwandte Themen