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

Ide Bagus / Ide Buruk? Menggunakan MySQL RAND() di luar sekumpulan kecil hasil subquery?

Sebenarnya...Saya akhirnya menjalankan tes dan saya mungkin telah menjawab pertanyaan saya sendiri. Saya pikir saya akan memposting informasi ini di sini jika itu berguna bagi orang lain. (Jika saya melakukan kesalahan di sini, beri tahu saya!)

Ini agak mengejutkan...

Bertentangan dengan semua yang saya baca, saya membuat tabel bernama TestData dengan 1 juta baris dan menjalankan kueri berikut:

PILIH * FROM TestData WHERE number =41 ORDER BY RAND() LIMIT 8

...dan mengembalikan baris dalam rata-rata 0,0070 detik. Saya tidak begitu mengerti mengapa RAND() memiliki reputasi yang buruk. Tampaknya cukup berguna bagi saya, setidaknya dalam situasi khusus ini.

Saya memiliki tiga kolom di tabel saya:

id [BESAR(20)] | bidang teks [teks kecil] | nomor [BIGINT(20)]

Kunci Utama pada id, indeks pada nomor.

Saya kira MySQL cukup pintar untuk mengetahui bahwa itu seharusnya hanya menerapkan RAND() ke 20 baris yang dikembalikan oleh "WHERE number =41" ? (Saya secara khusus menambahkan hanya 20 baris yang memiliki nilai 41 untuk 'angka'.)

Metode subquery alternatif mengembalikan hasil dengan waktu rata-rata sekitar .0080 detik, yang lebih lambat dari metode non-subquery.

Metode subquery:SELECT * FROM (SELECT * FROM TestData WHERE number =41) sebagai t ORDER BY RAND() LIMIT 8



  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.connector - Anda memiliki kesalahan dalam sintaks SQL Anda; dekat '%s' di baris 1

  2. Pemantauan MySQL yang Efektif Dengan Dasbor SCUMM:Bagian Satu

  3. Bagaimana memisahkan hasil pencarian berdasarkan kategori? MySQL + PHP

  4. Tidak ada duplikat dalam kueri SQL

  5. KESALAHAN MySql! Server berhenti tanpa memperbarui file PID