Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Pengguna dengan Berbilang Peranan Merentas Baris Pangkalan Data dengan Cekap?

Bagaimana untuk Memilih Pengguna dengan Berbilang Peranan Merentas Baris Pangkalan Data dengan Cekap?

DDD
DDDasal
2025-01-19 16:53:09871semak imbas

How to Efficiently Select Users with Multiple Roles Across Database Rows?

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 roleids (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!

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