Bir fiyat karşılaştırma sitesi yazmıştım bir acemilik zamanlarımda.
350k ürün, bunlarla alakalı 3 milyon etiket, taxonomyleri falan vardı.
Oradan aldığım dersler şunlar.
Tek büyük sorgu yerine bölünmüş küçük sorgular kullanın...
Mümkün mertebe varchar ve text indexler yerine doğrudan sayısal primary indexler üzerinden veri çağırın.

1) hiç bir zaman mysql rand() fonksiyonunu kullanma
- bunun yerine php rand fonksiyonunu kullan, mysql "rand() LIMIT 20" ile tek sorgu yapacağına rand olmadan primary index id üzerinden php ile üreteceğim 20 rand id yi 20 sorgu ile çağırmak daha hızlı yanıt veriyor.
- ya da tek query ile maksimum id yi öğren, sonra php ile tek rand değer üret ve id < $rand_deger şeklinde sıralı 20 kayıt getir.

2) büüyk veritabanlarında inner join, left join falan girmeyin. rand gibi işlem süresi çok uzuyor işlemci kullanımı tavan yapıyor.
-onun yerine tek sorguda işi halletmekten ziyade 2 sorgu kullanın.

Yalnız bu tek sorgu yerine iki sorgu kullanmak için indexlenmiş sayısal id alanlarını kullanın.
Mysql çok kararsız bir veritabanı. Boşken çat diye yanıt verebiliyor ama büyük veritabanlarında aynı anda çoklu istek geldiğinde tablo birleştirmeli sorgular ve rand lı sorgular işlem süresini çok uzatıyor, işlemci kullanımını tavan yaptırıyor.