Soru bu tür cevaplamak için doğru yolu bir kriter yapmaktır. Hızlı ve kirli bir uygulama, her şekilde yapmak ve sonra bir daha iyi performans gösterdiğini belirlemek için benchmark testleri çalıştırın.
MySQL bir dizin kullanmak için imkansız çünkü ORDER BY RAND() yavaş olduğu bilinmektedir, o söyledikten sonra. MySQL temelde tablodaki her satır için bir kez RAND() işlevini çalıştırın ve sonra geri RAND() geldi ne dayalı satırları sıralamak.
Memcached havai tam tablo taraması maliyeti daha az olmaktadır eğer memcached tüm user_id s depolamak ve daha sonra rastgele bir eleman dizisini oluşturan seçerek diğer fikri daha iyi performans olabilir. Dataset büyük ya da yıpranmışlık bir sorun varsa, size rağmen sorunları çalıştırmak olabilir. Ayrıca uygulama için bazı karmaşıklığı ekliyoruz. Ben başka bir yol aramak için çalışacaktı.
Sana hem önerilerinizi geride olabilecek bir üçüncü seçenek vereyim: kullanıcı tablosunda bir count(user_id) satır seçin ve ardından php 0 arasında rastgele bir sayı oluşturmak var ve sonucu {[(0) }] eksi 1, dahil. Sonra SELECT * FROM user LIMIT 1 OFFSET random-number-generated-by-php; yapmak.
Yine, sorular bu tür cevap vermek doğru yolu kriter değildir. Başka bir şey spekülasyondur.