In den meisten Fällen können Sie die Leistungsfähigkeit von
Abfragen einschätzen, indem Sie die Anzahl der Suchvorgänge
auf der Festplatte ermitteln. Bei kleinen Tabellen finden Sie
gewöhnlich pro derartigen Suchvorgang einen Datensatz (weil der
Index im Zweifelsfall im Cache liegt). Bei größeren Tabellen
können Sie bei der Verwendung von B-Tree-Indizes
schätzungsweise die folgende Anzahl von Suchvorgängen
annehmen, um einen Datensatz zu finden:
log(
.
row_count
) /
log(index_block_length
/ 3 × 2
/ (index_length
+
data_pointer_length
)) + 1
In MySQL ist ein Indexblock gewöhnlich 1024 Byte groß, der
Datenzeiger umfasst weitere vier Byte. Bei einer Tabelle mit
500.000 Datensätzen und einer Indexlänge von drei Byte (der
Größe von MEDIUMINT
) gibt die Formel
log(500.000/log(1024/3*2/(3+4))+1
=
4
Suchvorgänge aus.
Dieser Index würde eine Speicherkapazität von 500.000 × 7 × 3/2 = 5,2 Mbyte benötigen (ein typisches Indexpuffer-Füllungsverhältnis von 2 : 3 vorausgesetzt), d. h., Sie hätten wahrscheinlich einen Großteil des Indexes im Speicher und benötigen nur ein oder zwei Aufrufe zum Datenlesen, um den Datensatz zu finden.
Bei Schreiboperationen hingegen benötigen Sie vier Suchanforderungen, um zu ermitteln, wo ein neuer Indexwert abgelegt werden muss, und normalerweise zwei Suchvorgänge, um den Index zu aktualisieren und den Datensatz zu schreiben.
Beachten Sie, dass die vorangegangene Beschreibung nicht
bedeutet, dass Ihre Anwendungsleistung sich nach und nach um den
Logarithmus N
verringert. Solange
alles vom Betriebssystem oder vom MySQL Server
zwischengespeichert wird, verringert sich die Geschwindigkeit
nur marginal, wenn die Tabellen größer werden. Sobald die
Daten zu umfangreich geworden sind, um zwischengespeichert zu
werden, geht alles viel langsamer, bis Ihre Anwendungen nur noch
mit Suchvorgängen auf der Festplatte beschäftigt sind (deren
Anzahl sich um log N
erhöht). Um
dies zu vermeiden, müssen Sie die Größe des Schlüssel-Caches
erhöhen, wenn der Umfang Ihrer Daten zunimmt. Bei
MyISAM
-Tabellen wird die Größe des
Schlüssel-Caches von der Systemvariablen
key_buffer_size
gesteuert. Siehe auch
Abschnitt 7.5.2, „Serverparameter feineinstellen“.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.