Bagaimanakah saya boleh menetapkan pembolehubah pengguna dengan cekap dalam MySQL berdasarkan hasil pertanyaan, mengelakkan pertanyaan bersarang untuk prestasi yang lebih baik?

Mary-Kate Olsen
Lepaskan: 2024-10-27 03:01:02
asal
849 orang telah melayarinya

How can I efficiently set user variables in MySQL based on query results, avoiding nested queries for improved performance?

Menetapkan Pembolehubah Pengguna daripada Keputusan Pertanyaan dalam MySQL

Dalam MySQL, pembolehubah pengguna menyediakan cara yang mudah untuk menyimpan nilai sementara semasa pelaksanaan pertanyaan. Keupayaan ini membolehkan anda melaraskan pertanyaan secara dinamik berdasarkan keadaan tertentu atau data yang diambil daripada pangkalan data.

Andaikan anda mempunyai senario di mana anda ingin menetapkan pembolehubah pengguna, seperti @kumpulan, berdasarkan hasil pertanyaan terhadap jadual USER, di mana USER dan GROUP adalah unik.

Pendekatan Pertanyaan Bersarang Tradisional

Lazimnya, tugasan ini boleh dicapai menggunakan pertanyaan bersarang, seperti yang anda nyatakan:

set @user = 123456;
set @group = (select GROUP from USER where User = @user);
select * from USER where GROUP = @group;
Salin selepas log masuk

Walau bagaimanapun, adalah penting untuk mengelakkan pertanyaan bersarang apabila mungkin atas sebab prestasi.

Tugasan Pembolehubah Dioptimumkan

Untuk mengoptimumkan tugasan pembolehubah dalam ini senario, anda boleh mengalihkan tugasan terus ke dalam pertanyaan itu sendiri:

SET @user := 123456;
SELECT @group := `group` FROM USER WHERE user = @user;
SELECT * FROM USER WHERE `group` = @group;
Salin selepas log masuk

Pendekatan ini mengelakkan keperluan untuk pertanyaan bersarang, menjadikannya lebih cekap.

Kes Ujian

Untuk menunjukkan pengoptimuman ini, pertimbangkan persediaan jadual berikut:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
Salin selepas log masuk

Hasil

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
Salin selepas log masuk

Nota Operator Tugasan

Perlu diperhatikan bahawa untuk pernyataan SET, sama ada = atau := boleh digunakan sebagai pengendali tugasan. Walau bagaimanapun, dalam kenyataan lain, := mesti digunakan, kerana = ditafsirkan sebagai operator perbandingan di luar SET.

Pendekatan Alternatif

Sebagai petua tambahan, anda juga boleh menggunakan klausa LIMIT untuk mendapatkan semula nilai tunggal ke dalam pembolehubah pengguna:

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh menetapkan pembolehubah pengguna dengan cekap dalam MySQL berdasarkan hasil pertanyaan, mengelakkan pertanyaan bersarang untuk prestasi yang lebih baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!