Rumah >pangkalan data >tutorial mysql >Prestasi SQL: Bilakah UNION Lebih Baik Daripada ATAU?
Prestasi SQL: Kontroversi antara UNION dan OR
Sekadar memikirkan bahawa menggantikan penyataan OR dengan KESATUAN akan meningkatkan prestasi SQL adalah suatu penyederhanaan yang berlebihan. Walau bagaimanapun, memahami nuansa cara ia digunakan boleh membawa kepada peningkatan prestasi yang ketara.
Fahami perbezaannya
ATAU melaksanakan satu pertanyaan dan mendapatkan semula baris yang memenuhi mana-mana syarat. UNION, sebaliknya, melaksanakan dua pertanyaan berasingan dan menggabungkan keputusannya. Perbezaan ini menjadi kritikal apabila OR melibatkan berbilang lajur.
Pertimbangkan pertanyaan hipotesis berikut:
<code class="language-sql">select username from users where company = 'bbc' or city = 'London';</code>
Jika kedua-dua lajur syarikat dan bandar mempunyai indeks, MySQL perlu memilih indeks. Ini boleh menyebabkan imbasan jadual penuh lajur lain.
UNION sebagai penyelesaian
UNION menyelesaikan masalah ini dengan mencabut pertanyaan:
<code class="language-sql">select username from users where company = 'bbc' union select username from users where city = 'London';</code>
Setiap subkueri menggunakan indeks masing-masing dengan berkesan, dan keputusan akhir ialah penyatuan dua set.
Nota pengisihan
UNION memang memerlukan pengisihan untuk menghapuskan pendua dalam set hasil. Walau bagaimanapun, memandangkan UNION memfokuskan pada set baris yang lebih kecil, overhed biasanya boleh diabaikan. Dalam kebanyakan kes apabila klausa WHERE mempengaruhi jadual, kos imbasan jadual penuh boleh melebihi kos isihan UNION.
Kesimpulan
UNION tidak semestinya lebih baik daripada OR. Walau bagaimanapun, ia boleh mengoptimumkan prestasi apabila ATAU melibatkan predikat pada lajur dengan indeks bercanggah. Memahami nuansa ini adalah penting untuk menulis pertanyaan SQL yang cekap.
Atas ialah kandungan terperinci Prestasi SQL: Bilakah UNION Lebih Baik Daripada ATAU?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!