Teil 5: MySQL 4 - Einplanungsmodifikatoren und Locking

SQL-Optimierung: Manuelles Priorisieren und Sperren

Unterstützung der Modifikatoren

Der MyISAM-Handler lässt eine Ausnahme von der allgemeinen Regel zu, dass Leser Schreiber sperren. Wenn nämlich eine MyISAM-Tabelle keine Löcher (d.h. keine gelöschten Reihen) aufweist, dann müssen alle INSERT-Anweisungen Zeilen in jedem Fall am Ende der Tabelle anhängen. Unter diesen Umständen können Clients auch dann neue Zeilen in die Tabelle einfügen, wenn andere Clients Daten aus der Tabelle lesen. Man bezeichnet dies als zeitgleiches Einfügen, denn die Clients können gleichzeitig Daten abrufen, ohne gesperrt zu werden. Wenn Sie diese Funktionalität einsetzen, müssen Sie Folgendes beachten:

  • Verwenden Sie den Modifikator LOW_PRIORITY nicht in Ihren INSERT-Anweisungen. Andernfalls werden Leser gesperrt, was ein zeitgleiches Einfügen verhindert.

  • Leser, die die Tabelle explizit sperren müssen, aber trotzdem zeitgleiches Einfügen erlauben wollen, müssen die Syntax LOCK TABLES … READ LOCAL statt LOCK TABLES … READ verwenden. Das Schlüsselwort LOCAL erlaubt Ihnen, eine Sperre anzubringen, die ein zeitgleiches Einfügen zulässt, weil sie sich nur auf in der Tabelle vorhandene Reihen bezieht und nicht verhindert, dass neue Reihen am Ende hinzugefügt werden.

Die Einplanungsmodifikatoren wurden nicht alle gleichzeitig in MySQL eingeführt. Folgende Tabelle listet die Modifikatoren auf und gibt an, in welcher MySQLVersion sie eingeführt wurden. Sehen Sie hier nach, um festzustellen, welche Möglichkeiten Ihre MySQL-Version unterstützt.

Einplanungsmodifikatoren und ihre Einführung in MySQL

Anweisungstyp

Einführungsversion

DELETE LOW_PRIORITY

3.22.5

INSERT LOW_PRIORITY

3.22.5

INSERT DELAYED

3.22.15

LOAD DATA LOW_PRIORITY

3.23.0

LOAD DATA CONCURRENT

3.23.38

LOCK TABLES ... LOW_PRIORITY WRITE

3.22.8

LOCK TABLES ... READ LOCAL

3.23.11

REPLACE LOW_PRIORITY

3.22.5

REPLACE DELAYED

3.22.15

SELECT ... HIGH_PRIORITY

3.22.9

UPDATE LOW_PRIORITY

3.22.5

SET SQL_LOW_PRIORITY_UPDATES

3.22.5