direk SELECT * FROM tablo ORDER BY RAND() yerine
sadece rastgele id leri almayı dene
SELECT id FROM tablo USE INDEX(id) ORDER BY RAND() LIMIT 10
daha sonra IN query yapın,
Eklemeyi unuttuğum bir kısım var. Veriyi seçerken where kullanarak belli bir değere sahip verileri sıralıyorum. where status = 0 gibi.
Bu durumda sizin önerdiğiniz şekil uygun olmayacaktır sanırım. Rastgele id seçimini yaparken sadece status = 0 olanlar arasından seçim yaptırmama gerekeceği için yine aynı şey olacaktır.
Merhaba
Verileri rasgele 100 parçaya bölün ve sadece id leri bir koleksiyona veya veritabına kayıt edin.
Bu işlemden sonra 1den 100e kadar rasgele bir dizi seçin ve seçilen dizidende 1den 100 e kadar bir id seçin , bundan sonra id hangi ürüne aitse onu çektirebilirsiniz.
Burdaki altın nokta yeni oluşturacağınız tablo veya dizilerde id atlaması olmamasıdır.
Teşekkürler öneri için. Ancak sanırım cache kullanımına yöneleceğim.
Cache yapmak diğer çözüm. Cache süresi dolduktan bir sonraki cache sırasında yine sorgu zamanı çok olacak. Cache mutlaka kullanmanız gerekiyor. Tavsiyem memcache. Sunucu sizin elinizdeyse server side memcache kurun ve sorgularınız da optimize edin.
Teşekkür ederim. Sanırım en sağlıklı kullanım cache kullanımı olacak. Bahsettiğim rastgele seçim sadece yönetim kısmında gerekli ve sadece sınırlı sayıda kişi muhattap oluyor olacak. Sitenin genelini etkilemediği için cache süresi dolsa dahi bir miktar bekleme sıkıntı olmayacaktır. Memcache kurulumu ile ilgileniyorum hemen.
rand sıralaması kullanmayın ve kullanıcaksanızda verileri en kötüsü 5 dk da olsa cache yapın
Teşekkür ederim. Evet cache sorunu çözecektir bendeki uygulamada.