Sebenarnya...Saya akhirnya menjalankan tes dan saya mungkin telah menjawab pertanyaan saya sendiri. Saya pikir saya akan memposting informasi ini di sini jika itu berguna bagi orang lain. (Jika saya melakukan kesalahan di sini, beri tahu saya!)
Ini agak mengejutkan...
Bertentangan dengan semua yang saya baca, saya membuat tabel bernama TestData dengan 1 juta baris dan menjalankan kueri berikut:
PILIH * FROM TestData WHERE number =41 ORDER BY RAND() LIMIT 8
...dan mengembalikan baris dalam rata-rata 0,0070 detik. Saya tidak begitu mengerti mengapa RAND() memiliki reputasi yang buruk. Tampaknya cukup berguna bagi saya, setidaknya dalam situasi khusus ini.
Saya memiliki tiga kolom di tabel saya:
id [BESAR(20)] | bidang teks [teks kecil] | nomor [BIGINT(20)]
Kunci Utama pada id, indeks pada nomor.
Saya kira MySQL cukup pintar untuk mengetahui bahwa itu seharusnya hanya menerapkan RAND() ke 20 baris yang dikembalikan oleh "WHERE number =41" ? (Saya secara khusus menambahkan hanya 20 baris yang memiliki nilai 41 untuk 'angka'.)
Metode subquery alternatif mengembalikan hasil dengan waktu rata-rata sekitar .0080 detik, yang lebih lambat dari metode non-subquery.
Metode subquery:SELECT * FROM (SELECT * FROM TestData WHERE number =41) sebagai t ORDER BY RAND() LIMIT 8