ฉันมีตาราง MySQL ที่มีขนาดใหญ่มากพร้อมข้อมูลประมาณ 150,000 แถว ขณะนี้เมื่อฉันลองและเรียกใช้
SELECT * FROM table WHERE id = '1';
รหัสทำงานได้ดีเนื่องจากฟิลด์ ID เป็นดัชนีหลัก อย่างไรก็ตามสำหรับการพัฒนาล่าสุดของโครงการฉันต้องค้นหาฐานข้อมูลตามฟิลด์อื่น ตัวอย่างเช่น:
SELECT * FROM table WHERE product_id = '1';
ฟิลด์นี้ไม่ได้จัดทำดัชนีไว้ก่อนหน้านี้ อย่างไรก็ตามฉันได้เพิ่มเข้าไปแล้วดังนั้นตอนนี้ mysql จะสร้างดัชนีฟิลด์ แต่เมื่อฉันพยายามเรียกใช้แบบสอบถามข้างต้นมันจะทำงานช้ามาก คำค้นหาอธิบายเปิดเผยว่าไม่มีดัชนีสำหรับฟิลด์ product_id เมื่อฉันได้เพิ่มไปแล้วและด้วยเหตุนี้แบบสอบถามจึงใช้เวลาตั้งแต่ 20 นาทีถึง 30 นาทีในการส่งคืนแถวเดียว
ผลการสำรวจอย่างสมบูรณ์ของฉันคือ:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
อาจเป็นประโยชน์ที่จะทราบว่าฉันเพิ่งดูและฟิลด์ ID ถูกเก็บเป็น INT ขณะที่ฟิลด์ PRODUCT_ID ถูกเก็บเป็น VARCHAR นี่อาจเป็นสาเหตุของปัญหาหรือไม่
EXPLAIN
ผลเต็มรูปแบบ? คุณแน่ใจหรือว่าไม่มีดัชนี? หรือมีดัชนีอยู่ แต่ MySQL เลือกที่จะไม่ใช้มัน