Apakah alternatif kepada pengendali LIKE apabila menanyakan sebilangan besar baris?
P粉191610580
2023-09-02 13:02:15
<p>Saya mempunyai jadual dengan lajur yang menyimpan rentetan rawak seperti ini: </p>
<pre class="brush:php;toolbar:false;">example_id = qwhs77gt65g7*</pre>
<p>Sesetengah data pada lajur kini mempunyai asterisk (*), manakala data lain tidak. </p>
<p>Saya perlu memilih yang ada. Saya menggunakan pertanyaan ini: </p>
<pre class="brush:php;toolbar:false;">PILIH example_id DARI example_tbl DI MANA example_id SEPERTI ‘%*%’</pre>
<p>Sekarang ini biasanya tidak menjadi masalah, tetapi saya menyoal berjuta-juta baris dan daripada apa yang saya dapat tahu, pengendali LIKE menjejaskan prestasi saya. Pertanyaan akan mengambil masa beberapa jam untuk diselesaikan</p>
<p>Soalan saya ialah apakah alternatif kepada pengendali LIKE? </p>
<p>PS Asterisk sentiasa berada di hujung rentetan. Tidak pasti sama ada itu membantu</p>
Memandangkan anda menyebut "tanda bintang sentiasa di hujung" maka anda boleh mencuba
其中 example_id LIKE '%*'
.Ini akan menemui sebarang nilai yang berakhir dengan "*"
atau
ialah mencari subrentetan dalam lajur jadual.
Salah satu cara untuk mencapainya ialah menggunakan fungsi instr(), yang mengambil 3 parameter.
Sintaks: instr(kedudukan, rentetan, sub_rentetan)
Kedudukan:
Sekarang bagaimana untuk menggunakan ini pada meja? Oleh kerana fungsi instr() ialah x3, ia mudah digunakan.
Contoh: tapis[ZCT] di mana instr(1,DIPERUNTUKANKEPADA,"Ram") 0.
Di mana 1 ialah kedudukan permulaan untuk mencari subrentetan, ALLOTEDTO ialah nama lajur yang terdiri daripada rentetan, dan parameter terakhir ialah subrentetan itu sendiri. Ini akan memberi anda semua rekod dalam jadual di mana lajur ALLOTEDTO mengandungi subrentetan "Ram"
Ini bersamaan dengan.
Pilih * daripada ZCT di mana ALLOTEDTO serupa dengan "%Ram%".
Nota: Fungsi Instr() adalah peka huruf besar-besaran, jadi sentiasa gunakan fungsi huruf besar atau huruf kecil.