Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kembalikan hasil acak ( pesan berdasarkan Rand() )

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Entity Framework + MySQL - Mengapa kinerjanya sangat buruk?

  2. Bisakah saya menggabungkan beberapa baris MySQL menjadi satu bidang?

  3. Cara Menghapus Prosedur Tersimpan di MySQL

  4. Memanggil prosedur tersimpan dengan parameter Keluar menggunakan PDO

  5. MySQL cara terbaik untuk menyimpan string panjang