Teroka alternatif untuk mendapatkan berbilang hasil rawak
Walaupun fungsi ORDER BY RAND() MySQL menyediakan kaedah untuk mendapatkan hasil rawak secara langsung, ia tidak dapat memilih berbilang baris data rawak dengan cekap. Artikel ini meneroka teknik alternatif untuk mengoptimumkan pertanyaan sedemikian.
Penyelesaian pengoptimuman: menggunakan lajur indeks dan subquery
Untuk pertanyaan mencari hasil rawak, pengoptimuman prestasi adalah penting. Satu pendekatan inovatif yang berfungsi dengan baik ialah menggunakan gabungan lajur dan subkueri yang diindeks. Teknik ini mengurangkan overhed pemprosesan dengan ketara dengan mengasingkan proses rawak kepada keadaan tertentu.
Langkah:
Contoh:
Pertimbangkan pertanyaan berikut:
<code class="language-sql">SELECT u.id, p.photo FROM users u, profiles p WHERE p.memberid = u.id AND p.photo != '' AND (u.ownership=1 OR u.stamp=1) ORDER BY RAND() LIMIT 18 </code>
Pertanyaan dioptimumkan:
<code class="language-sql">SELECT g.* FROM table g JOIN (SELECT id FROM table WHERE RAND() < (SELECT ((4 / COUNT(*)) * 10) FROM table) ORDER BY RAND() LIMIT 4) AS z ON z.id= g.id</code>
Kelebihan:
Nota:
Kaedah pengoptimuman ini bergantung pada ketekalan antara subkueri dan pertanyaan utama untuk memastikan ia mengembalikan hasil yang tepat. Selain itu, memilih had yang munasabah untuk peratusan hasil rawak boleh membantu mengekalkan prestasi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Berbilang Baris Rawak dengan Cekap daripada MySQL tanpa Menggunakan ORDER BY RAND()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!