Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Menyoal Berbilang Lajur Dengan Cekap Menggunakan Klausa IN MySQL?

Bagaimanakah Saya Boleh Menyoal Berbilang Lajur Dengan Cekap Menggunakan Klausa IN MySQL?

Mary-Kate Olsen
Lepaskan: 2025-01-01 11:36:12
asal
937 orang telah melayarinya

How Can I Efficiently Query Multiple Columns Using MySQL's IN Clause?

Menyoal Berbilang Lajur dalam Klausa IN dengan MySQL

Apabila bekerja dengan data berstruktur, menanya berbilang lajur dalam klausa IN ialah operasi biasa . Walau bagaimanapun, untuk MySQL, terdapat perbezaan halus antara menggunakan klausa IN dengan satu tupel dan dengan satu set tupel.

Pertanyaan Tuple Tunggal:

Yang asal soalan menerangkan senario di mana anda mempunyai empat lajur (x0, y0, x1, y1) yang mewakili koordinat geografi. Untuk gabungan nilai tunggal, seperti (4, 3, 5, 6), anda boleh menggunakan klausa IN seperti berikut:

SELECT * FROM my_table WHERE (x0, y0, x1, y1) IN ((4, 3, 5, 6))
Salin selepas log masuk

Dengan indeks komposit dihidupkan (x0, y0, x1, y1 ), pertanyaan ini akan mengesan baris yang dikehendaki dengan cekap.

Berbilang Tuple Pertanyaan:

Walau bagaimanapun, soalan itu juga melibatkan pertanyaan senarai tupel, seperti [(4, 3, 5, 6), (9, 3, 2, 1)]. Untuk senario sedemikian, pengoptimum MySQL mungkin tidak sentiasa mengendalikan klausa IN secara optimum.

Peningkatan Pengoptimum dalam Versi MySQL Lebih Baharu:

Dalam versi MySQL terdahulu (sebelum 5.7), pengoptimum akan memecahkan pertanyaan tuple berbilang kepada satu siri klausa OR, seperti yang diterangkan dalam yang disediakan jawapan:

(  ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 ) 
OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 )
)
Salin selepas log masuk

Pendekatan ini boleh membawa kepada rancangan pelaksanaan yang tidak cekap, terutamanya dengan set data yang besar.

Dalam versi MySQL yang lebih baharu (5.7 dan ke atas), pengoptimum telah dipertingkatkan untuk menjana lebih banyak pelan yang cekap untuk berbilang pertanyaan tuple IN. Untuk versi ini, menggunakan sintaks berikut disyorkan:

(x0, y0, x1, y1) IN ((4, 3, 5, 6), (9, 3, 2, 1))
Salin selepas log masuk

Pengoptimum akan menjana pelan pelaksanaan yang dioptimumkan secara automatik yang memanfaatkan indeks yang tersedia.

Kesimpulan:

Apabila menanyakan berbilang lajur dalam klausa IN dengan MySQL, pendekatan yang disyorkan bergantung pada versi MySQL. Untuk versi yang lebih lama, adalah dinasihatkan untuk memecahkan pertanyaan kepada klausa OR. Untuk versi yang lebih baharu, pengoptimum yang dipertingkatkan boleh mengendalikan berbilang pertanyaan tuple IN dengan cekap tanpa memerlukan penstrukturan semula manual.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyoal Berbilang Lajur Dengan Cekap Menggunakan Klausa IN MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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