Rumah >pangkalan data >tutorial mysql >Bagaimanakah Fungsi MySQL ORDER BY RAND() Sebenarnya Berfungsi?

Bagaimanakah Fungsi MySQL ORDER BY RAND() Sebenarnya Berfungsi?

DDD
DDDasal
2024-11-03 00:23:02612semak imbas

How Does MySQL's ORDER BY RAND() Function Actually Work?

Cara MySQL's ORDER BY RAND() Function Beroperasi

MySQL's ORDER BY RAND() fungsi menjana keputusan yang kelihatan rawak, tetapi mekanisme sebenar berbeza daripada kepercayaan yang biasa dipegang. Bertentangan dengan andaian, MySQL tidak menambah lajur nilai rawak yang mempengaruhi pengisihan. Sebaliknya, ia menggunakan proses berikut:

  1. Menjana Nombor Rawak: Fungsi menjana nombor rawak antara 0 dan 1 untuk setiap baris dalam jadual.
  2. Isih Baris: Baris kemudian diisih dalam tertib menaik berdasarkan nombor rawak yang dijana.
  3. Mendapatkan Data: Apabila LIMIT digunakan dengan ORDER BY RAND() , MySQL mendapatkan semula baris dari bahagian atas set hasil yang diisih.

Masa Pelaksanaan Tidak Dijangka

Pertanyaan ujian yang disediakan menunjukkan masa pelaksanaan yang tidak dijangka:

Query Execution Time
SELECT * FROM table ORDER BY RAND() LIMIT 1 30-40 seconds
SELECT id FROM table ORDER BY RAND() LIMIT 1 0.25 seconds
SELECT id, username FROM table ORDER BY RAND() LIMIT 1 90 seconds

Perubahan dalam masa pelaksanaan ini dikaitkan dengan data berbeza yang diambil oleh setiap pertanyaan. Memilih keseluruhan baris (*) memerlukan kos yang lebih tinggi berbanding dengan mengambil hanya lajur (id) tertentu atau mengambil data yang telah diindeks (id).

Kaedah Alternatif untuk Pemilihan Rawak Pantas

Walaupun PESANAN OLEH RAND() mungkin tidak menawarkan prestasi optimum, kaedah alternatif boleh memberikan hasil yang lebih pantas:

  • Kaedah Jay: Menggunakan subquery untuk menjana ID rawak kerana pemilihan baris adalah cekap tetapi boleh menjadi menyusahkan apabila berurusan dengan pertanyaan yang rumit.
  • Pendekatan Berasaskan Prosedur: Melaksanakan prosedur yang berulang melalui ID rawak sehingga mencari baris yang sah adalah penyelesaian yang berkesan tetapi mungkin menghadapi masalah dengan jurang yang besar dalam data.

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

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