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 IhrenINSERT
-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
stattLOCK TABLES … READ
verwenden. Das SchlüsselwortLOCAL
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.
Anweisungstyp |
Einführungsversion |
|
3.22.5 |
|
3.22.5 |
|
3.22.15 |
|
3.23.0 |
|
3.23.38 |
|
3.22.8 |
|
3.23.11 |
|
3.22.5 |
|
3.22.15 |
|
3.22.9 |
|
3.22.5 |
|
3.22.5 |