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:
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!