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

Pemilihan acak tercepat WHERE kolom X adalah Y (NULL)

Mendapatkan catatan yang benar-benar acak bisa lambat. Tidak banyak yang bisa mengatasi fakta ini; jika Anda ingin benar-benar acak, maka kueri harus memuat semua data yang relevan untuk mengetahui catatan mana yang harus dipilih.

Untungnya, ada cara yang lebih cepat untuk melakukannya. Mereka tidak benar-benar acak, tetapi jika Anda senang menukar sedikit keacakan murni untuk kecepatan, maka mereka harus cukup baik untuk sebagian besar tujuan.

Dengan mengingat hal itu, cara tercepat untuk mendapatkan catatan "acak" adalah dengan menambahkan kolom tambahan ke DB Anda, yang diisi dengan nilai acak. Mungkin hash MD5 asin dari kunci utama? Apa pun. Tambahkan indeks yang sesuai pada kolom ini, lalu cukup tambahkan kolom ke ORDER BY . Anda klausa dalam kueri, dan Anda akan mendapatkan kembali catatan Anda dalam urutan acak.

Untuk mendapatkan satu record acak, cukup tentukan LIMIT 1 dan tambahkan WHERE random_field > $random_value di mana nilai acak akan menjadi nilai dalam rentang bidang baru Anda (misalnya hash MD5 dari nomor acak).

Tentu saja sisi buruknya di sini adalah meskipun catatan Anda akan berada dalam urutan acak, mereka akan terjebak dalam urutan acak yang sama. Saya memang mengatakan itu adalah kesempurnaan perdagangan untuk kecepatan kueri. Anda dapat menyiasatinya dengan memperbaruinya secara berkala dengan nilai-nilai baru, tetapi saya rasa itu bisa menjadi masalah bagi Anda jika Anda perlu tetap memperbaruinya.

Sisi negatif lainnya adalah bahwa menambahkan kolom tambahan mungkin terlalu banyak untuk ditanyakan apakah Anda memiliki batasan penyimpanan dan DB Anda sudah berukuran besar, atau jika Anda memiliki DBA yang ketat untuk dilewati sebelum Anda dapat menambahkan kolom. Tetapi sekali lagi, Anda harus menukar sesuatu; jika Anda menginginkan kecepatan kueri, Anda memerlukan kolom tambahan ini.

Bagaimanapun, saya harap itu membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang dimaksud dengan memilih 1 dari tabel?

  2. Ubah div sesuai dengan kotak dropdown yang dipilih

  3. MySQL - nilai pengurangan otomatis

  4. Koneksi Rusak di mysql C++

  5. Bisakah MySQL Cluster menangani database terabyte?