dedlfix: Welchen Index zur Datenbankbeschleunigung?

Beitrag lesen

Hi!

MySQL nutzt nur genau einen Index pro Tabelle
Das kann ich nicht bestätigen.

Beim Suchen von Beispielen mit öffentlich zugänglichen Daten, ist es mir meist nicht gelungen, den Fall nachzustellen. Aber dann fand ich die FlightStats. Die sind allerdings recht groß (1,3 GB komprimierter Download - 3,6 GB ausgepackt) und downloaden sich auch recht langsam (60 Minuten bei mir). Zudem sind es kopierte Tabellen und kein SQL-Export, müssen also zu Fuß ins MySQL-datadir kopiert werden, wozu man eine administrative Berechtigung auf dem System benötigt. Nach dem Kopieren und dem gegebenenfalls notwendigen Anpassen der Besitzverhältnisse kann MySQL (5.0 in meinem Fall) aber ohne weiteres Zutun darauf zugreifen. Das Merge- und Session-Script der Download-Seite braucht man nicht.

Man schaue sich die Struktur einer beliebigen ontime-Tabelle an, zum Beispiel ontime_2000_01 und sieht dort einzelne Indexe auf carrier und destination. Damit kann man so eine Abfrage erstellen

EXPLAIN SELECT * FROM ontime\_2000\_01 WHERE carrier = 'AA' AND destination = 'JFK'

und bekommt mit possible_keys: carrier,destination und key: destination,carrier zwei verwendete Indexe zu sehen.

Es kann natürlich auch sein, dass ich das falsch interpretiere, aber ich denke, dass nach Anwenden des ersten Index noch genügend Datensätze zur Auswahl stehen müssen, damit sich die Verwendung des zweiten Indexes lohnt (destination JFK: 3597, carrier AA: 61666, AA+JFK: 958 Datensätze). Schränkt man das ganze noch auf tail_num ein (da liegt auch ein Index drauf) und selektiert

EXPLAIN SELECT * FROM ontime\_2000\_01 WHERE carrier = 'AA' AND destination = 'JFK' AND tail\_num = 'N061AA'

dann wird nur der tail_num-Index verwendet (possible_keys: carrier,destination,tail_num und key: tail_num), denn diese bringt es auf insgesamt nur 51 Einträge in der gesamten Tabelle.

Lo!