Yaklaşık 150.000 satır veri içeren çok büyük bir MySQL masam var. Şu anda, koşmaya çalıştığımda
SELECT * FROM table WHERE id = '1';
Kimlik alanı birincil dizin olduğundan kod düzgün çalışır. Ancak, projede yeni bir gelişme için, başka bir alana göre veritabanı aramak zorunda. Örneğin:
SELECT * FROM table WHERE product_id = '1';
Bu alan önceden dizine eklenmemişti; Ancak, bir ekledim, bu yüzden mysql şimdi alan indeksler, ancak yukarıdaki sorguyu çalıştırmaya çalıştığınızda, çok yavaş çalışır. Bir EXPLAIN sorgusu, zaten bir tane eklediğimde product_id alanı için bir dizin olmadığını ve bunun sonucunda sorgunun tek bir satır döndürmek için 20 dakika ile 30 dakika arasında sürdüğünü gösterir.
Tüm EXPLAIN sonuçlarım:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
Bir göz attığımı ve ID alanının INT olarak, PRODUCT_ID alanının da VARCHAR olarak depolandığını not etmek yararlı olabilir. Sorunun kaynağı bu olabilir mi?
EXPLAIN
sonuçları gönderebilir misiniz ? Emin misiniz onun orada işte hiçbir indeks? Veya dizin orada, ama MySQL onu kullanmamayı mı tercih ediyor?