Kapitel 8: MySQL-Tab ellentypen 525
F¨ur die Wiederherstellung nach Abst¨urzen sollten Sie Datensicherungen der Tabellen
plus das Bin¨ar-Log von MySQL benutzen. Siehe Abschnitt 5.4.1 [Backup], Seite 217.
Achtung: Wenn Sie alte Log-Dateien l¨oschen, die in Benutzung sind, ist BDB nicht in
der Lage, Wiederherstellungen durchzuf¨uhren, und Sie k¨onnten Daten verlieren, wenn
etwas schief geht.
• MySQL erfordert einen PRIMARY KEY in jeder BDB-Tabelle, um auf vorher gelesene
Zeilen verweisen zu k¨onnen. Wenn Sie keine Prim¨arschl¨ussel anlegen, erzeugt MySQL
einen versteckten PRIMARY KEY. Der versteckte Schl¨ussel hat eine L¨ange von 5 Bytes
und wird bei jedem Einf¨ugeversuch um 1 hochgez¨ahlt.
• Wenn alle Spalten, auf die Sie in einer BDB-Tabelle zugreifen, Teil desselben Indexes
oder Teil des Prim¨arschl¨ussels sind, kann MySQL die Anfrage ausf¨uhren, ohne auf die
tats¨achliche Zeile zugreifen zu m¨ussen. Bei einer MyISAM-Tabelle gilt das nur, wenn die
Spalten Teil desselben Indexes sind.
• Der PRIMARY KEY ist schneller als jeder andere Schl¨ussel, weil PRIMARY KEY zusammen
mit den Zeilendaten gespeichert wird. Weil die anderen Schl ¨ussel als Schl¨usseldaten
plus PRIMARY KEY gespeichert werden, ist es wichtig, den PRIMARY KEY so kurz wie
m¨oglich zu halten, um Plattenplatz zu sparen und bessere Geschwindigkeit zu erzielen.
• LOCK TABLES funktioniert bei BDB-Tabellen wie bei anderen Tabellen. Wenn Sie LOCK
TABLE nicht benutzen, f¨uhrt MySQL einer interne mehrfache Schreibsperre auf die
Tabelle aus, um sicherzustellen, dass die Tabelle korrekt gesperrt ist, wenn ein anderer
Thread eine Tabellensperre ausf¨uhrt.
• Internes Sperren in BDB-Tab ellen wird auf Seitenebene durchgef¨uhrt.
• SELECT COUNT(*) FROM tabelle ist langsam, weil BDB-Tabellen keinen Z¨ahler f¨ur die
Anzahl der Zeilen in der Tabelle unterhalten.
• Scannen ist langsamer als bei MyISAM-Tabellen, weil Daten in BDB-Tabellen in B-
B¨aumen und nicht in separaten Daten-Dateien gespeichert werden.
• Die Applikation muss stets darauf vorbereitet sein, F¨alle zu handhaben, bei denen
jegliche
¨
Anderung einer BDB-Tabelle zu einem automatischen Rollback f¨uhren kann
und jegliches Lesen fehlschlagen kann, weil ein Blockierungsfehler auftritt.
• Schl¨ussel werden nicht auf vorherige Schl¨ussel komprimiert, wie das bei ISAM- und
MyISAM-Tabellen der Fall ist. Mit anderen Worten ben¨otigt die Schl¨usselinformation
etwas mehr Platz bei BDB-Tabellen im Vergleich zu MyISAM-Tabellen, die nicht PACK_
KEYS=0 benutzen.
• Oft gibt es L¨ocher in der BDB-Tabelle, damit Sie neue Zeilen in der Mitte des
Schl¨usselbaums einf¨ugen k¨onnen. Das macht BDB-Tabellen etwas gr¨oßer als
MyISAM-Tabellen.
• Der Optimierer muss n¨aherungsweise die Anzahl von Zeilen in der Tabelle kennen.
MySQL l¨ost dieses Problem, indem Einf¨ugeoperationen gez¨ahlt werden, und unterh¨alt
diese in einem separaten Segment in jeder BDB-Tabelle. Wenn Sie nicht viele
DELETE oder ROLLBACK ausf¨uhren, sollte diese Zahl ausreichend genau f¨ur den
MySQL-Optimierer sein. Weil MySQL die Zahl nur beim Schließen speichert, kann
sie falsch sein, wenn MySQL unerwartet stirbt. Das sollte kein schwerer Fehler
sein, selbst wenn die Zahl nicht 100% korrekt ist. Man kann die Anzahl von Zeilen
aktualisieren, indem man ANALYZE TABLE oder OPTIMIZE TABLE ausf¨uhrt. Siehe
Comentarios a estos manuales