Dalam MySQL, anda boleh menggunakan pertanyaan IN untuk menapis set data yang memenuhi syarat. Menggunakan pertanyaan IN dengan mudah boleh menggabungkan berbilang keadaan pertanyaan dan meningkatkan kecekapan pertanyaan. Walau bagaimanapun, pertanyaan IN juga mungkin menghadapi kesesakan prestasi apabila memproses sejumlah besar data. Oleh itu, terdapat beberapa aspek penting yang perlu diberi perhatian semasa melakukan pertanyaan IN.
1. Penggunaan asas pertanyaan IN
Sintaks pertanyaan IN adalah seperti berikut:
PILIH lajur1, lajur2, …
DARI nama_jadual
WHERE column_name IN (value1, value2, …);
Antaranya, column_name ialah nama medan yang hendak disoal, value1, value2, dsb. ialah syarat pertanyaan, parameter atau subquery boleh digunakan sebagai syarat.
Sebagai contoh mudah, katakan ada pelanggan meja pelanggan, yang mengandungi medan seperti ID pelanggan, nama dan bandar. Kami perlu menanyakan maklumat pelanggan yang bandarnya ialah "Beijing" atau "Shanghai". >
Pernyataan pertanyaan ini menggunakan pertanyaan IN dan menetapkan keadaan bandar kepada "Beijing" atau "Shanghai". Hasil pertanyaan akan mengembalikan maklumat pelanggan yang memenuhi dua syarat ini.
2. Masalah prestasi dan penyelesaian pertanyaan IN
Walaupun pertanyaan IN lebih mudah, masalah prestasi juga mungkin berlaku apabila memproses sejumlah besar data. Masalah biasa ialah masa tindak balas pernyataan pertanyaan terlalu panjang, mengakibatkan kemerosotan prestasi. Jenis masalah lain ialah limpahan memori atau masalah berkaitan memori lain yang disebabkan oleh senarai nilai yang terlalu panjang dalam pernyataan pertanyaan IN.
Berikut ialah beberapa penyelesaian biasa:
Menggunakan subkueri
- Menggunakan subkueri untuk menggantikan pertanyaan IN ialah penyelesaian biasa. Subkueri boleh menguraikan pertanyaan IN kepada pertanyaan bebas, dengan itu mengurangkan kerumitan masa pertanyaan. Contohnya:
PILIH * DARI pelanggan WHERE bandar = 'Beijing' ATAU bandar = 'Shanghai';
Pernyataan pertanyaan ini menggunakan operator ATAU untuk menetapkan keadaan bandar kepada "Beijing" atau " Shanghai". Hasil pertanyaan akan mengembalikan maklumat pelanggan yang memenuhi dua syarat ini.
Gunakan pertanyaan JOIN
- Menggunakan pertanyaan JOIN juga boleh menggantikan pertanyaan JOIN boleh mewujudkan perkaitan antara berbilang jadual dan mengembalikan hasil pertanyaan yang memenuhi syarat perkaitan. Contohnya:
PILIH * DARI pelanggan c SERTAI pesanan o ON c.customer_id = o.customer_id WHERE c.city = 'Beijing' ATAU c.city = 'Shanghai';
Pertanyaan ini Pernyataan itu menggunakan pertanyaan JOIN dan mewujudkan hubungan antara kedua-dua jadual. Hasil pertanyaan akan mengembalikan maklumat pelanggan dan maklumat pesanan yang memenuhi syarat yang berkaitan.
Gunakan jadual sementara
- Jika terdapat terlalu banyak nilai dalam senarai pertanyaan untuk menggunakan pertanyaan subquery atau JOIN untuk menggantikan pertanyaan IN, anda boleh mempertimbangkan menggunakan jadual sementara. Jadual sementara ialah jadual boleh dipadam sendiri yang boleh dibuat apabila diperlukan dan dipadamkan secara automatik selepas pertanyaan selesai. Nilai daripada senarai pertanyaan boleh disimpan dalam jadual sementara dan kemudian dikaitkan dengan jadual asal menggunakan pertanyaan JOIN. Contohnya:
BUAT JADUAL SEMENTARA tmp_city (city varchar(10));
MASUKKAN KE DALAM NILAI tmp_city ('Beijing'), ('Shanghai');
PILIH * DARI pelanggan c SERTAI tmp_city t ON c.city = t.city;
Pernyataan pertanyaan ini mencipta jadual sementara untuk menyimpan nama bandar dalam senarai pertanyaan. Kemudian gunakan pertanyaan JOIN untuk mengaitkan jadual sementara ini dengan jadual pelanggan untuk mengembalikan maklumat pelanggan yang memenuhi syarat persatuan.
3. Isih menggunakan ORDER BY
Apabila menggunakan pertanyaan IN, anda juga perlu memberi perhatian kepada isu penting: bagaimana untuk mengekalkan susunan hasil yang dikembalikan. Jika senarai nilai tetap dinyatakan dalam keadaan pertanyaan, kami berharap hasil yang dikembalikan juga akan disusun mengikut susunan senarai ini. Contohnya:
PILIH * DARI pelanggan DI MANA bandar DI ('Beijing', 'Shanghai') PESANAN MENGIKUT DESC bandar;
Pernyataan pertanyaan ini mengisih keputusan dalam susunan menurun nama bandar, pertama Maklumat yang dikembalikan adalah maklumat pelanggan "Shanghai", bukan maklumat pelanggan "Beijing".
Jika anda mahu hasil yang dikembalikan disusun dalam susunan tetap senarai nilai, anda boleh menggunakan pernyataan CASE. Contohnya:
PILIH *
DARI pelanggan
WHERE city IN ('Beijing', 'Shanghai')
ORDER BY CASE city
WHEN '北京' THEN 1
WHEN '上海' THEN 2
END;
Salin selepas log masuk
Pernyataan pertanyaan ini menggunakan CASE kenyataan, kedudukan "Beijing" pertama dan "Shanghai" kedua. Hasil pertanyaan akan mengembalikan maklumat pelanggan yang memenuhi syarat ini, diisih mengikut nama bandar.
Apabila menggunakan pertanyaan IN, semua faktor di atas perlu dipertimbangkan.
4. Ringkasan
IN query ialah kaedah pertanyaan yang biasa digunakan dalam MySQL, yang boleh menggabungkan berbilang keadaan pertanyaan dengan mudah dan meningkatkan kecekapan pertanyaan. Walau bagaimanapun, pertanyaan IN juga mungkin menghadapi kesesakan prestasi apabila memproses sejumlah besar data. Untuk meningkatkan prestasi pertanyaan, anda boleh menggunakan teknik seperti subkueri, JOIN pertanyaan atau jadual sementara. Pada masa yang sama, apabila menggunakan pertanyaan IN, anda juga perlu memberi perhatian kepada susunan keputusan Anda boleh menggunakan penyata ORDER BY dan CASE untuk mencapai hasil pengembalian pesanan tetap.
Atas ialah kandungan terperinci mysql dalam pengisihan pertanyaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!