Ho una tabella MySQL molto grande con circa 150.000 righe di dati. Attualmente, quando provo a correre
SELECT * FROM table WHERE id = '1';
il codice funziona bene poiché il campo ID è l'indice primario. Tuttavia, per uno sviluppo recente nel progetto, devo cercare nel database da un altro campo. Per esempio:
SELECT * FROM table WHERE product_id = '1';
Questo campo non era precedentemente indicizzato; tuttavia, ne ho aggiunto uno, quindi mysql ora indicizza il campo, ma quando provo a eseguire la query sopra, funziona molto lentamente. Una query EXPLAIN rivela che non esiste alcun indice per il campo product_id quando ne ho già aggiunto uno e, di conseguenza, la query impiega da 20 minuti a 30 minuti per restituire una singola riga.
I miei risultati completi EXPLAIN sono:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
Potrebbe essere utile notare che ho appena dato un'occhiata e il campo ID è memorizzato come INT mentre il campo PRODUCT_ID è memorizzato come VARCHAR. Potrebbe essere questa la fonte del problema?
EXPLAIN
risultati completi ? Sei certo è che non c'è nessun indice? O l'indice è lì, ma MySQL sta scegliendo di non usarlo?