Hallo Leute,
irgendwie vermute ich akute Betriebsblindheit bei mir,
aber auch unzureichende Vertrautheit mit den Möglich-
keiten von mySQL.
Ich habe eine Tabelle:
mysql> show create table t_nref;
CREATE TABLE t\_nref
(d\_id
varchar(50) binary NOT NULL default '',
d\_ref
varchar(30) binary NOT NULL default '',
d\_time
int(11) NOT NULL default '0',
UNIQUE KEY i\_nref\_id\_ref
(d\_id
,d\_ref
),
KEY i\_nref\_ref\_time
(d\_ref
,d\_time
),
KEY i\_nref\_time
(d\_time
)
) TYPE=MyISAM
Nun möchte ich in einer WHERE-Klausel nach d_ref
filtern und dabei über den Index i_nref_ref_time zugreifen (das sollte m. E. gehen, weil d_ref das
erste Feld des kombinierten Indexes ist).
Das macht mySQL aber nicht:
mysql> explain select * from t_nref where d_ref = 123;
+--------+------+-----------------+------+---------+------+--------+------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+--------+------+-----------------+------+---------+------+--------+------------+
| t_nref | ALL | i_nref_ref_time | NULL | NULL | NULL | 134235 | where used |
+--------+------+-----------------+------+---------+------+--------+------------+
1 row in set (0.09 sec)
"explain" zeigt mir, daß mySQL einen full table scan
für diese Abfrage durchführen würde - obwohl es sich
durchaus bewußt ist, daß "i_nref_ref_time" ein seman-
tisch geeigneter Schlüssel wäre.
Der Index projeziert auch recht ordentlich (im Mittel
würden 25 Treffer pro Schlüsselwert heraus kommen).
Versuchsweise habe ich auch mal einen separaten Index
nur über t_nref angelegt.
"explain" zeigt dann diesen Index ebenfalls in der ent-
sprechenden Spalte an, verwendet ihn aber auch nicht.
Alles andere, was ich mit mySQL und Indexen bisher
gemacht habe, funktioniert tadellos (auch in exakt
dieser Datenbank auf dieser Maschine).
Ich bin völlig ratlos.
Was könnte ich tun, um mehr Informationen zu bekommen?
Jeder Hinweis, der zur Entwirrung meiner Gedanken
beiträgt, wäre mir äußerst recht.
Viele Grüße
Michael