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

Bagaimana cara kerja MySQL ORDER BY RAND()?

Meskipun tidak ada yang namanya "pesanan cepat oleh Rand()", ada solusi untuk tugas spesifik Anda.

Untuk mendapatkan satu baris acak , Anda dapat melakukan seperti yang dilakukan blogger jerman ini:http://web.archive.org/web/20200211210404/http://www.roberthartung.de/mysql-order-by-rand-a- studi kasus-alternatif/ (Saya tidak dapat melihat url hotlink. Jika ada yang melihatnya, silakan edit tautannya.)

Teksnya dalam bahasa Jerman, tetapi kode SQLnya sedikit di bawah halaman dan dalam kotak putih besar, jadi tidak sulit untuk dilihat.

Pada dasarnya apa yang dia lakukan adalah membuat prosedur yang berfungsi untuk mendapatkan baris yang valid. Itu menghasilkan angka acak antara 0 dan max_id, coba ambil satu baris, dan jika tidak ada, teruskan sampai Anda menekan yang ada. Dia mengizinkan pengambilan x jumlah baris acak dengan menyimpannya di tabel sementara, jadi Anda mungkin dapat menulis ulang prosedurnya agar sedikit lebih cepat mengambil hanya satu baris.

Kelemahan dari ini adalah jika Anda menghapus BANYAK baris, dan ada celah yang besar, kemungkinan besar akan kehilangan banyak kali, sehingga tidak efektif.

Pembaruan:Waktu eksekusi berbeda

Ini mungkin ada hubungannya dengan pengindeksan. id diindeks dan cepat diakses, sedangkan menambahkan username untuk hasilnya, berarti perlu membacanya dari setiap baris dan meletakkannya di tabel memori. Dengan * itu juga harus membaca semuanya ke dalam memori, tetapi tidak perlu melompati file data, artinya tidak ada waktu yang terbuang untuk mencari.

Ini membuat perbedaan hanya jika ada kolom panjang variabel (varchar/teks), yang berarti ia harus memeriksa panjangnya, lalu melewati panjang itu, bukan hanya melewatkan panjang yang ditetapkan (atau 0) di antara setiap baris.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan Membangun Program dengan konektor mysql

  2. Data dari formulir PHP tidak diposting ke mySQL

  3. MySQL &NHibernate. Bagaimana cara memperbaiki kesalahan:Kolom 'ReservedWord' bukan milik tabel ReservedWords?

  4. Bagaimana cara menyimpan tanda tangan di MySQL

  5. Koneksi db otomatis ditutup di php?