Michael Schröpl: mySQL: Nicht-Verwendung eines Index

Beitrag lesen

Hallo Cheatah,

CREATE TABLE t\_nref
Als Tabellenname ist das nicht wirklich sprechend... ;-)

Alle Tabellen in diesem System heißen "t_*", alle
Spalten heißen "d_*".

Das einzige, was mir auffällt (was ich aber von MySQL
nicht als Problem erwarten würde) ist, dass Du die
Spalte als VARCHAR angelegt hast[1] und als NUMBER
abfragst.

Oh - ich verstehe! Darauf hatte ich nicht geachtet.

Und es ist in der Tat die Lösung des Problems:

mysql> describe 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 | 135838 | where used |
+--------+------+-----------------+------+---------+------+--------+------------+
1 row in set (0.01 sec)

mysql> describe select * from t_nref where d_ref = "123";
+--------+------+-----------------+-----------------+---------+-------+------+------------+
| table  | type | possible_keys   | key             | key_len | ref   | rows | Extra      |
+--------+------+-----------------+-----------------+---------+-------+------+------------+
| t_nref | ref  | i_nref_ref_time | i_nref_ref_time |      30 | const |    1 | where used |
+--------+------+-----------------+-----------------+---------+-------+------+------------+
1 row in set (0.00 sec)

mySQL konvertiert zwar implizit den Datentyp, schaltet
dabei aber den Indexzugriff ab - darauf muß man erst
mal kommen ...

[1] Wenn es sich, wie mir scheint, um eine Referenz
handelt, sollte es eh ein NUMBER-Typ sein ;-)

Wahr - aber die Tabelle stammt nicht von mir und wird
von einem closed-source-Produkt einer Schwesterfirma
angelegt und mit Daten versorgt ... ich schreibe nur
die Suchmaschine über diese Daten.

Vielen Dank - das hat mir sehr geholfen!
       Michael