Hi,
mehr oder weniger ist dies informativ gedacht; vielleicht weiß aber auch jemand, wie das Problem zu lösen ist.
Vorgeschichte: Ich habe in einer MySQL-Tabelle (V 3.23, glaube ich) einen mehrspaltigen Index angelegt, welcher auch über einige TEXT-Spalten ging (ich habe mit Datentypen experimentiert). Das Statement dazu sah etwa wie folgt aus:
CREATE INDEX indexname ON tabellenname (zahlenfeld, ip (15), page (250), nochwasanderes)
"ip" war als TINYTEXT, "page" als TEXT definiert. Die Breite der Spalte "ip" ergibt sich aus der Maximallänge einer IP-Adresse (logisch).
Füllen konnte ich beide Spalten hervorragend, und nach allen Regeln der Kunst stimmte der Inhalt auch exakt mit dem überein, was drin stehen sollte. Nchdem der Index jedoch angelegt war, brachte ein Billig-Select der Art
SELECT page, count(*)
FROM tabelle
WHERE zahlenfeld=? AND ip=?
GROUP BY page
kein Ergebnis mehr - ohne den Index kam wieder das, was ich erwartet hatte. Auch das Entfernen der Spalte "nochwasanderes" im Index änderte dies nicht. Ein EXPLAIN auf das Statement verriet mir, dass genau dieser Index verwendet werden sollte.
Nun ja, ich sollte noch erwähnen, dass der Inhalt der Spalte "ip" meist auf "127.0.0.1" lautete und damit die Länge 15 nicht erreichte. Wenn ich die Indexdefinition auf "ip (9)" geändert hatte, brachte das aber dummerweise auch nichts. Erst die (sinnvolle) Umstellung auf VARCHAR ermöglichte es, trotz Index zu den richtigen Ergebnissen zu kommen.
Ist das ein Phänomen, oder einfach eine typische Eigenschaft von BLOBs? Die Doku verriet mir nur, dass bei BLOBs dem Index eben Längen mitgegeben werden müssen, nicht aber, dass es dann "Besonderheiten" bei der Funktionsweise gibt. Oder ist das ein (mittlerweile gefixter) Bug?
Cheatah