Tôi đã có một bảng MySQL rất lớn với khoảng 150.000 hàng dữ liệu. Hiện tại, khi tôi cố gắng chạy
SELECT * FROM table WHERE id = '1';
mã chạy tốt vì trường ID là chỉ mục chính. Tuy nhiên, để phát triển gần đây trong dự án, tôi phải tìm kiếm cơ sở dữ liệu theo một lĩnh vực khác. Ví dụ:
SELECT * FROM table WHERE product_id = '1';
Lĩnh vực này trước đây không được lập chỉ mục; tuy nhiên, tôi đã thêm một cái, vì vậy mysql bây giờ lập chỉ mục trường, nhưng khi tôi cố chạy truy vấn trên, nó chạy rất chậm. Một truy vấn EXPLAIN cho thấy rằng không có chỉ mục nào cho trường Product_id khi tôi đã thêm một truy vấn và kết quả là truy vấn mất bất kỳ nơi nào từ 20 phút đến 30 phút để trả về một hàng.
Kết quả GIẢI THÍCH đầy đủ của tôi là:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
Có thể hữu ích khi lưu ý rằng tôi vừa xem và trường ID được lưu dưới dạng INT trong khi trường PRODUCT_ID được lưu dưới dạng VARCHAR. Đây có thể là nguồn gốc của vấn đề?
EXPLAIN
kết quả đầy đủ ? Bạn có chắc chắn rằng nó không có chỉ số? Hoặc là chỉ mục ở đó, nhưng MySQL chọn không sử dụng nó?