Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menyoal Berbilang Lajur Dengan Cekap Menggunakan Klausa IN MySQL?
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))
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 ) )
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))
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!