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
Lepaskan: 2025-01-04 14:59:45
asal
756 orang telah melayarinya

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;
Salin selepas log masuk

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