Ich habe eine sehr große MySQL-Tabelle mit ungefähr 150.000 Datenzeilen. Derzeit, wenn ich versuche zu laufen
SELECT * FROM table WHERE id = '1';
Der Code läuft einwandfrei, da das ID-Feld der Primärindex ist. Für eine aktuelle Entwicklung im Projekt muss ich die Datenbank jedoch nach einem anderen Feld durchsuchen. Zum Beispiel:
SELECT * FROM table WHERE product_id = '1';
Dieses Feld wurde zuvor nicht indiziert. Ich habe jedoch eine hinzugefügt, sodass mysql das Feld jetzt indiziert. Wenn ich jedoch versuche, die obige Abfrage auszuführen, wird sie sehr langsam ausgeführt. Eine EXPLAIN-Abfrage zeigt, dass es keinen Index für das Feld product_id gibt, wenn ich bereits einen hinzugefügt habe. Daher dauert die Abfrage zwischen 20 und 30 Minuten, um eine einzelne Zeile zurückzugeben.
Meine vollständigen EXPLAIN-Ergebnisse sind:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
Es kann hilfreich sein zu beachten, dass ich gerade einen Blick darauf geworfen habe und das ID-Feld als INT gespeichert ist, während das PRODUCT_ID-Feld als VARCHAR gespeichert ist. Könnte dies die Ursache des Problems sein?
EXPLAIN
Ergebnisse veröffentlichen? Sind Sie sicher, dass es keinen Index gibt? Oder ist der Index dort, aber MySQL entscheidet sich dafür, ihn nicht zu verwenden?