Teil 5: MySQL 4 - Einplanungsmodifikatoren und Locking

SQL-Optimierung: Manuelles Priorisieren und Sperren

Risiken bei INSERT DELAYED

INSERT DELAYED ist praktisch, wenn andere Clients langwierige SELECT-Anweisungen ausführen und sie nicht blockiert werden sollen, bis das Einfügen ausgeführt werden kann. Der Client, der die Anweisung INSERT DELAYED absetzt, kann seine Arbeit schneller wieder fortsetzen, weil der Server die einzufügende Zeile einfach in eine Warteschlange stellt.

Sie sollten jedoch auch einige andere Unterschiede im Verhalten zwischen dem normalen INSERT und INSERT DELAYED kennen. Der Client erhält einen Fehler zurück, falls die INSERT-Anweisung einen Syntaxfehler enthält, aber keine weiteren Informationen, die andernfalls zur Verfügung stehen würden. Beispielsweise können Sie sich nicht darauf verlassen, mit dem Rückgabewert der Anweisung den AUTO_INCREMENT-Wert zu erhalten. Außerdem erhalten Sie auch keinen Zähler für die Anzahl doppelter Werte in eindeutigen Indizes.

Das passiert, weil die Einfügeoperation einen Status zurückgibt, bevor die eigentliche Operation überhaupt stattgefunden hat. Ein weiteres Problem ist, dass Zeilen, wenn sie für INSERT DELAYED-Anweisungen in die Warteschlange gestellt werden und auf das Einfügen warten, bei einem Serverausfall durch Absturz oder Abbruch (mit kill -9) verloren gehen.