Alasan pemesanan dengan RAND()
bisa lambat adalah Anda memaksa database untuk benar-benar mengurutkan seluruh tabel sebelum mengembalikan apa pun. Hanya mengurangi beban ke pemindaian tabel tunggal jauh lebih cepat (walaupun masih agak lambat).
Ini berarti Anda bisa mendapatkan bagian dari jalan hanya dengan menghindari pemesanan:
SELECT *
FROM my_table
WHERE RAND() < 0.1
ORDER BY RAND()
LIMIT 100
Ini akan memilih sekitar 1% dari semua baris dalam tabel, mengurutkannya dan mengembalikan 100 teratas. Perhatikan bahwa masalah utama di sini (serta dengan jawaban @ cmd) adalah Anda tidak dapat memastikan bahwa kueri kembali apa saja.
Pendekatan di atas harus melibatkan pemindaian seluruh tabel (untuk memutuskan baris mana yang akan digunakan) diikuti dengan kira-kira 1% dari baris. Jika Anda memiliki banyak baris, Anda dapat mengurangi persentasenya.