Günlerdir hatta aralıklarla çalıştığım için haftalardır bir türlü çözemediğim eleştiriler sayfasındaki performans sorununu sonunda buldum.
MySQL iki tabloyu INNER JOIN yaparken anladığım kadarıyla PK’i foreign key olan tabloyu tüm satıların getirildiği ilk tablo yapıyor. Ama eleştiriler sayfasında eleştiri tablosunun ilk olması gerekiyor. JOIN cümlesindeki tabloların yerini tek başına değiştirmek bir işe yaramıyor.
SELECT STRAIGHT_JOIN dedikten sonra doğru sırada join yapıldığı zaman işe yarıyor.
Doğru join’de “EXPLAIN” çıktısı:
************* 1. row *************
table: elestiri
type: index
possible_keys: foto_id
key: zaman
key_len: 8
ref: NULL
rows: 234572
Extra:
************* 2. row *************
table: foto
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 3
ref: elestiri.foto_id
rows: 1
Extra:
2 rows in set (0.01 sec)
Hatalı joinde çıktı:
************* 1. row *************
table: foto
type: ALL
possible_keys: PRIMARY
key: NULL
key_len: NULL
ref: NULL
rows: 41574
Extra: Using temporary; Using filesort
************* 2. row *************
table: elestiri
type: ref
possible_keys: foto_id
key: foto_id
key_len: 3
ref: foto.id
rows: 2
Extra:
2 rows in set (0.00 sec)
