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

Kapan perintah fungsi MySQL ORDER BY RAND()?

Anda benar, itu akan menerapkan ORDER BY setelah mengurangi jumlah baris dengan WHERE, GROUP BY, dan HAVING. Tapi itu akan berlaku ORDER BY sebelum LIMIT.

Jadi, jika Anda memfilter jumlah baris dengan cukup, maka ya, ORDER BY RAND() dapat mencapai apa yang Anda inginkan tanpa dampak kinerja yang hebat. Ada manfaat sah dari kode yang sederhana dan mudah dibaca.

Masalah datang ketika Anda berpikir kueri Anda harus mengurangi baris menjadi sesuatu yang kecil, tetapi seiring waktu seiring bertambahnya data Anda, jumlah baris yang perlu diurutkan menjadi besar lagi. Karena kueri Anda kemudian LIMIT 10 pada hasil yang diurutkan menyembunyikan fakta bahwa Anda melakukan ORDER BY RAND() pada 500 ribu baris. Anda baru saja melihat kinerja yang semakin buruk secara misterius.

Saya telah menulis tentang metode alternatif untuk memilih baris acak di buku saya SQL Antipatterns:Menghindari Kesalahan Pemrograman Basis Data , atau dalam jawaban lain di sini di Stack Overflow:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL COUNT BERBEDA

  2. Bagaimana saya bisa mengembalikan hak penuh pengguna root MySQL?

  3. Konversi file dari Cp1252 ke utf -8 java

  4. layanan mysqld berhenti sekali sehari di server EC2

  5. ambil dan cetak nilai setelah pemisah koma dari satu bidang menggunakan gabungan (codeigniter)