Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Pengguna dengan Berbilang Peranan Merentas Baris Pangkalan Data dengan Cekap?
Mengekstrak Data Berdasarkan Keadaan Berbilang Baris
Pertanyaan pangkalan data selalunya memerlukan pemilihan data berdasarkan berbilang keadaan yang tersebar merentas baris yang berbeza. Mari kita pertimbangkan senario dengan jadual yang mengandungi userid
dan roleid
, serupa dengan ini:
<code>+--------+--------+ | userid | roleid | +--------+--------+ | 1 | 1 | | 1 | 2 | | 1 | 3 | | 2 | 1 | +--------+--------+</code>
Matlamatnya ialah untuk mencari userid
unik yang memiliki ketiga-tiga roleid
s (1, 2, dan 3). Hanya userid
1 memenuhi kriteria ini.
Membandingkan Kaedah Pertanyaan
Dua pendekatan biasa wujud: pertanyaan agregat dan pertanyaan penyertaan.
Pendekatan Pertanyaan Agregat:
Kaedah ini menggunakan fungsi agregat dan klausa HAVING
:
<code class="language-sql">SELECT userid FROM userrole WHERE roleid IN (1, 2, 3) GROUP BY userid HAVING COUNT(*) = 3</code>
Walaupun mudah, pendekatan ini boleh menjadi tidak cekap untuk jadual besar kerana keperluan untuk memproses, mengumpulkan dan menapis semua baris.
Sertai Pendekatan Pertanyaan:
Alternatif yang lebih cekap menggunakan sambungan sendiri:
<code class="language-sql">SELECT t1.userid FROM userrole t1 INNER JOIN userrole t2 ON t1.userid = t2.userid AND t2.roleid = 2 INNER JOIN userrole t3 ON t2.userid = t3.userid AND t3.roleid = 3 WHERE t1.roleid = 1</code>
Kaedah ini secara beransur-ansur mengecilkan keputusan yang ditetapkan dengan setiap gabungan, membawa kepada prestasi yang lebih baik, terutamanya apabila kriteria pemadanan jarang berlaku.
Pengoptimuman Pangkalan Data
Pendekatan terbaik bergantung pada pelbagai faktor, termasuk pengedaran data, sistem pangkalan data dan konfigurasi sistem. Penanda aras yang teliti adalah penting untuk menentukan penyelesaian optimum untuk pangkalan data dan set data tertentu.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Pengguna dengan Berbilang Peranan Merentas Baris Pangkalan Data dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!