Mam bardzo dużą tabelę MySQL z około 150 000 wierszy danych. Obecnie, kiedy próbuję uruchomić
SELECT * FROM table WHERE id = '1';
kod działa poprawnie, ponieważ pole ID jest indeksem podstawowym. Jednak w przypadku ostatniego rozwoju projektu muszę przeszukać bazę danych według innego pola. Na przykład:
SELECT * FROM table WHERE product_id = '1';
To pole nie było wcześniej indeksowane; Jednak dodałem jeden, więc mysql teraz indeksuje pole, ale kiedy próbuję uruchomić powyższe zapytanie, działa ono bardzo wolno. Zapytanie EXPLAIN ujawnia, że nie ma indeksu dla pola product_id, gdy już go dodałem, w wyniku czego zapytanie zajmuje od 20 minut do 30 minut, aby zwrócić pojedynczy wiersz.
Moje pełne wyniki WYJAŚNIJ to:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
Warto zauważyć, że właśnie spojrzałem, a pole ID jest przechowywane jako INT, natomiast pole PRODUCT_ID jest przechowywane jako VARCHAR. Czy to może być przyczyną problemu?
EXPLAIN
wyniki? Czy jesteś pewien, że to nie ma indeksu? Czy jest tam indeks, ale MySQL decyduje się go nie używać?