查詢大量行時,什麼可以取代 LIKE 運算子?
P粉191610580
2023-09-02 13:02:15
<p>我有一個表,其中有一列儲存隨機字串,如下所示:</p>
<pre class="brush:php;toolbar:false;">example_id = qwhs77gt65g7*</pre>
<p>現在該列上的某些資料帶有星號 (*),而其他資料則沒有。 </p>
<p>我需要選擇那些有的。我正在使用這個查詢:</p>
<pre class="brush:php;toolbar:false;">SELECT example_id FROM example_tbl WHERE example_id LIKE ‘%*%’</pre>
<p>現在這通常不是問題,但我正在查詢數百萬行,據我所知,LIKE 運算子正在影響我的效能。完成查詢需要幾個小時</p>
<p>我的問題是 LIKE 運算子的替代方案是什麼? </p>
<p>PS 星號始終位於字串的末尾。不知道是否有幫助</p>
既然您提到「星號總是在最後」那麼您可以嘗試
其中 example_id LIKE '%*'
。這將會找到以「*」結尾的任何值
或
是在表格的列中搜尋子字串。
實現它的一種方法是使用 instr() 函數,instr() 函數需要 3 個參數。
語法:instr(rank, string, sub_string)
排名:
現在如何將其應用到表中?由於instr()函數是x3,因此應用起來很簡單。
例如:過濾器[ZCT] 其中 instr(1,ALLOTEDTO,”Ram”) 0.
其中1是尋找子字串的起始位置,ALLOTEDTO是由字串組成的列名,最後一個參數是子字串本身。這將為您提供表中 ALLOTEDTO 列包含子字串「Ram」的所有記錄
這相當於。
從 ZCT 中選擇 *,其中 ALLOTEDTO 類似於「%Ram%」。
注意:Instr() 函數區分大小寫,因此請一律使用大寫或小寫函數。