Rumah >pangkalan data >tutorial mysql >Bolehkah UNION ALL dengan LIMIT 1 Mensimulasikan Pertanyaan Berjujukan dengan Cekap?

Bolehkah UNION ALL dengan LIMIT 1 Mensimulasikan Pertanyaan Berjujukan dengan Cekap?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-04 14:59:45714semak imbas

Can UNION ALL with LIMIT 1 Efficiently Simulate Sequential Queries?

Pertanyaan Selektif Berurutan Menggunakan UNION ALL

Masalah:
Mencari satu baris dalam jadual pangkalan data dengan kriteria carian dikurangkan secara berperingkat. Contohnya:

PILIH * DARI imej DI MANA nama LIKE 'teks' DAN group_id = 10 HAD 1

Jika tiada hasil diperoleh, laksanakan:

PILIH * DARI imej DI MANA nama LIKE 'teks' HAD 1

Jika masih tiada hasil, laksanakan:

SELECT * FROM image WHERE group_id = 10 LIMIT 1

Bolehkah proses ini dilakukan dengan satu ungkapan?

Penyelesaian:

SELECT * FROM image WHERE name = 'name105' AND group_id = 10
UNION ALL
SELECT * FROM image WHERE name = 'name105'
UNION ALL
SELECT * FROM image WHERE group_id = 10
LIMIT 1;

Penjelasan:

  • UNION ALL menggabungkan keputusan berbilang penyata SELECT ke dalam satu jadual.
  • LIMIT klausa menentukan bahawa hanya baris pertama hasil gabungan harus dikembalikan.
  • Indeks pada (nama, group_id) dan (group_id) adalah penting untuk prestasi.
  • Pertanyaan ini sangat berkesan kerana PostgreSQL mengoptimumkan pelan pelaksanaan untuk berhenti memproses penyata SELECT tambahan sebaik sahaja LIMIT berpuas hati.

Penyelesaian Generik:

Pendekatan di atas boleh digeneralisasikan untuk sebarang bilangan parameter carian dengan menambahkan pernyataan SELECT tambahan pada rantai UNION ALL.

Pertimbangan untuk Keputusan Isih:

Sejak Klausa LIMIT digunakan pada keseluruhan hasil, pengisihan tidak begitu berguna kerana hanya baris pertama akan dikembalikan.

Atas ialah kandungan terperinci Bolehkah UNION ALL dengan LIMIT 1 Mensimulasikan Pertanyaan Berjujukan dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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