Jika Anda tidak keberatan mengorbankan kerumitan pada operasi penyisipan/pembaruan/penghapusan untuk kecepatan pada pemilihan, Anda selalu dapat menambahkan nomor urut dan memastikan nomor tersebut dipertahankan pada penyisipan/pembaruan/penghapusan, maka setiap kali Anda melakukan pemilihan, cukup pilih pada satu atau lebih nomor acak dari dalam kisaran ini. Jika kolom "urutan" diindeks, saya rasa itu akan secepat yang Anda dapatkan.
Alternatifnya adalah "mengocok". Tambahkan kolom urutan, sisipkan nilai acak ke dalam kolom ini, dan setiap kali Anda memilih catatan, urutkan menurut kolom urutan dan perbarui urutan catatan yang dipilih ke nilai acak baru. Pembaruan seharusnya hanya memengaruhi catatan yang telah Anda ambil, jadi seharusnya tidak terlalu mahal ... tetapi mungkin ada baiknya menjalankan beberapa pengujian terhadap kumpulan data Anda.
Ini mungkin hal yang cukup jahat untuk dikatakan, tetapi saya akan tetap mengatakannya ... apakah ada kebutuhan untuk menampilkan data 'acak'? jika Anda mencoba menampilkan catatan acak, Anda mungkin melakukan sesuatu yang salah.
Pikirkan tentang Amazon ... apakah mereka menampilkan produk acak, atau apakah mereka menampilkan yang populer, dan 'barang yang dibeli orang lain ketika mereka melihat ini'. Apakah SO memberi Anda daftar pertanyaan acak di sebelah kanan sini, atau daftar pertanyaan terkait? Hanya beberapa bahan untuk dipikirkan.