Apakah ada cara ringkas untuk mengambil catatan acak dari tabel server sql?
Ya
SELECT TOP 1 * FROM table ORDER BY NEWID()
Penjelasan
Sebuah NEWID()
dihasilkan untuk setiap baris dan tabel kemudian diurutkan berdasarkan itu. Catatan pertama dikembalikan (yaitu catatan dengan GUID "terendah").
Catatan
-
GUID dihasilkan sebagai nomor pseudo-acak sejak versi empat:
UUID versi 4 dimaksudkan untuk menghasilkan UUID dari nomor acak orpseudo-acak.
Algoritmanya adalah sebagai berikut:
- Tetapkan dua bit paling signifikan (bit 6 dan 7) dari clock_seq_hi_and_reserved masing-masing ke nol dan satu.
- Setel empat bit paling signifikan (bit 12 hingga 15) dari bidang waktu_hi_dan_versi ke nomor versi 4-bit dari Bagian 4.1.3.
- Setel semua bit lainnya ke nilai yang dipilih secara acak (atau pseudo-acak).
—URN Namespace Pengidentifikasi Unik Universal (UUID) - RFC 4122
-
Alternatif
SELECT TOP 1 * FROM table ORDER BY RAND()
tidak akan bekerja seperti yang dipikirkan orang.RAND()
mengembalikan satu nilai tunggal per kueri, sehingga semua baris akan berbagi nilai yang sama. -
Meskipun nilai GUID adalah pseudo-acak, Anda memerlukan PRNG yang lebih baik untuk aplikasi yang lebih menuntut.
-
Performa tipikal kurang dari 10 detik untuk sekitar 1.000.000 baris — tentu saja tergantung pada sistemnya. Perhatikan bahwa indeks tidak mungkin tercapai, sehingga kinerjanya akan relatif terbatas.