Mengoptimumkan Pertanyaan SQL dengan Keadaan LIKE Berbilang: Jadual Sementara lwn. Pendekatan Lain
Pertanyaan SQL yang melibatkan berbilang LIKE
keadaan kadangkala boleh menjadi tidak cekap. Pendekatan biasa, secara langsung menggunakan berbilang LIKE
keadaan dalam klausa WHERE
, mungkin tidak optimum untuk set data yang besar. Walaupun mencipta jadual sementara adalah satu penyelesaian, mari kita terokai kaedah ini dan bandingkan dengan alternatif.
Kaedah asal:
<code class="language-sql">select * from tbl where col like 'ABC%' or col like 'XYZ%' or col like 'PQR%';</code>
Ini berfungsi, tetapi prestasi boleh merosot dengan banyak LIKE
keadaan.
Menggunakan Jadual Sementara:
Pendekatan ini melibatkan mencipta jadual sementara untuk menyimpan corak LIKE
, kemudian menggabungkannya dengan jadual utama.
<code class="language-sql">CREATE TEMPORARY TABLE patterns (pattern VARCHAR(20));</code>
<code class="language-sql">INSERT INTO patterns VALUES ('ABC%'), ('XYZ%'), ('PQR%');</code>
<code class="language-sql">SELECT DISTINCT t.* -- DISTINCT removes duplicates if a row matches multiple patterns FROM tbl t JOIN patterns p ON t.col LIKE p.pattern;</code>
Kaedah ini boleh menjadi lebih cekap daripada berbilang OR
keadaan, terutamanya dengan sejumlah besar corak, kerana pangkalan data boleh mengoptimumkan operasi gabungan. Menggunakan DISTINCT
menghalang hasil pendua jika satu baris sepadan dengan berbilang corak.
Pendekatan Alternatif (Selalunya Lebih Cekap):
REGEXP
atau RLIKE
(jika disokong oleh pangkalan data anda): Fungsi ini membolehkan padanan corak yang lebih kompleks menggunakan ungkapan biasa. Keadaan REGEXP
tunggal selalunya boleh menggantikan berbilang LIKE
keadaan, yang membawa kepada prestasi yang lebih baik. Contohnya:<code class="language-sql">SELECT * FROM tbl WHERE col REGEXP '^(ABC|XYZ|PQR).*$';</code>
Memilih Pendekatan Terbaik:
Penyelesaian optimum bergantung kepada beberapa faktor:
REGEXP
atau carian teks penuh lebih sesuai untuk corak yang kompleks.Sebelum melaksanakan jadual sementara, adalah disyorkan untuk menguji prestasi pendekatan berbeza menggunakan data dan sistem pangkalan data khusus anda. Memprofilkan pertanyaan anda boleh membantu mengenal pasti kesesakan dan membimbing anda ke arah penyelesaian yang paling berkesan. Selalunya, REGEXP
atau carian teks penuh akan menawarkan prestasi unggul berbanding pendekatan jadual sementara.
Atas ialah kandungan terperinci Patutkah Saya Menggunakan Jadual Sementara untuk Meningkatkan Kecekapan dengan Berbilang Keadaan LIKE dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!