Mysql - INDEX greift ab einer bestimmten Größe nicht mehr

BugsBastard

Erfahrenes Mitglied
Hallo zusammen,

ich habe eine MyISAM-Tabelle, hauptsächlich bestehend aus INT-Feldern + ein Datums-Feld.

Ich habe einen UNIQUE-Key auf das Datum + Kunden-ID + Produkt-ID. Die Tabelle enthält Abverkaufszahlen für verschiedene Kunden.

Nun möchte ich die Abverkaufszahlen für die letzten 365 Tage auslesen, Gruppiert nach Produkt und Kunde. Dabei ist mir beim EXPLAIN aufgefallen, daß der INDEX nicht genommen wird. Wenn ich die Abverkaufszahlen der letzten 30 Tage auswerte, dann nimmt er den INDEX. Auch ein OPTIMIZE-Table hat hier nichts gebracht. Kann es mit der Datenmenge zu tun haben? In der Tabelle sind über 80 Millionen Datensätze.

Gruss und Danke,

Bugs
 
Kann es mit der Datenmenge zu tun haben? In der Tabelle sind über 80 Millionen Datensätze.

Jup. Wobei es mehr darum geht, wieviele Datensätze aus der Ergebnismenge es zu Datensätzen insgesamt gibt.

Manchmal verwendet MySQL auch dann keinen Index, wenn ein solcher vorhanden ist. Ein Umstand, unter dem dies geschieht, liegt vor, wenn der Optimierer der Ansicht ist, dass MySQL bei Verwendung eines Indexes auf einen sehr großen Anteil der Datensätze in der Tabelle zugreifen muss. (In diesem Fall ist ein Tabellenscan mit hoher Wahrscheinlichkeit schneller, weil weniger Suchvorgänge erforderlich sind.) Wenn eine solche Abfrage jedoch dank einer LIMIT-Klausel nur ein paar Datensätze abruft, verwendet MySQL trotzdem einen Index, da sich die Datensätze, die zum Ergebnis gehören, auf diese Weise schneller finden lassen.

[http://dev.mysql.com/doc/refman/5.1/de/mysql-indexes.html]
 
Zurück