Adakah Fungsi MySQL ORDER BY RAND() Sebenarnya Menggunakan Algoritma Pemilihan Rawak?

Patricia Arquette
Lepaskan: 2024-11-03 14:08:30
asal
426 orang telah melayarinya

Does MySQL's ORDER BY RAND() Function Actually Use a Random Selection Algorithm?

Adakah MySQL ORDER BY RAND() Berfungsi Algoritma Pemilihan Rawak?

Dalam bidang operasi pangkalan data, mendapatkan data dalam keadaan rawak benar pesanan boleh menjadi teka-teki. Fungsi ORDER BY RAND() MySQL telah lama menjadi alat yang digunakan untuk tujuan ini, tetapi mekanisme asas di sebalik rawaknya yang jelas masih agak sukar difahami.

Walaupun andaian bahawa ORDER BY RAND() menambah lajur rawak ke jadual sebelum mengisih, penyelidikan baru-baru ini telah menunjukkan bahawa ini tidak berlaku. Sebaliknya, MySQL menggunakan strategi yang berbeza untuk mencapai pemilihan rawak yang dikatakan.

Malah, pertanyaan yang dicadangkan oleh Jay dalam blognya terbukti sebagai kaedah paling berkesan untuk mendapatkan baris rawak. Pertanyaan ini bergabung dengan jadual dengan subkueri yang menjana ID rawak dalam julat ID maksimum jadual. Dengan menapis baris jadual kepada mereka yang mempunyai ID lebih besar daripada atau sama dengan ID rawak ini, pertanyaan mendapatkan semula baris rawak dengan cepat.

Walau bagaimanapun, pemerhatian pelik telah dibuat mengenai masa pelaksanaan tiga pertanyaan serupa:

  • PILIH * DARI TEMPAHAN jadual MENGIKUT RAND() HAD 1; (30-40 saat)
  • PILIH id DARI jadual PESANAN MENGIKUT RAND() HAD 1; (0.25 saat)
  • PILIH id, nama pengguna DARI jadual PESANAN MENGIKUT RAND() HAD 1; (90 saat)

Masa pelaksanaan yang berbeza-beza ini kelihatan berlawanan dengan intuitif, kerana ketiga-tiga pertanyaan melibatkan pengisihan mengikut satu lajur. Jurang ini boleh dikaitkan dengan pengindeksan.

Dalam pertanyaan kedua, lajur id diindeks, membolehkan akses pantas kepada data. Walau bagaimanapun, termasuk lajur tambahan seperti nama pengguna dalam pertanyaan ketiga memerlukan MySQL membaca setiap baris dan memperuntukkan memori untuk nilai-nilai ini, meningkatkan masa pelaksanaan dengan ketara.

Kesimpulannya, fungsi MySQL ORDER BY RAND() tidak menggunakan algoritma pemilihan rawak sebenar. Sebaliknya, ia menggunakan teknik yang mensimulasikan rawak dengan menyertai jadual dengan subkueri yang menjana ID rawak. Walaupun bukan pendekatan yang paling cekap, ia menyediakan kaedah praktikal untuk mendapatkan semula data dalam susunan yang kelihatan rawak.

Atas ialah kandungan terperinci Adakah Fungsi MySQL ORDER BY RAND() Sebenarnya Menggunakan Algoritma Pemilihan Rawak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan