模糊查詢Like與Instr

2021-06-18 19:12:40 字數 1339 閱讀 3043

oracle中like與instr模糊查詢效能大比拼

instr(title,'

手冊')>0  

相當於title like '%

手冊%'

instr(title,'

手冊')=1  

相當於title like '

手冊%'

instr(title,'

手冊')=0  

相當於title not like '%

手冊%'

t表中將近有1100萬資料,很多時候,我們要進行字串匹配,在sql語句中,我們通常使用like來達到我們搜尋的目標。但經過實際測試發現,like的效率與instr函式差別相當大。下面是一些測試結果:

sql> set timing on

sql> select count(*) from t where instr(title,'手冊')>0;

count(*)

----------

65881

elapsed: 00:00:11.04

sql> select count(*) from t where title like '%手冊%';

count(*)

----------

65881

elapsed: 00:00:31.47

sql> select count(*) from t where instr(title,'手冊')=0;

count(*)

----------

11554580

elapsed: 00:00:11.31

sql> select count(*) from t where title not like '%手冊%';

count(*)

----------

11554580

另外,我在結另外乙個2億多的表,使用8個並行,使用like查詢很久都不出來結果,但使用instr,4分鐘即完成查詢,效能是相當的好。這些小技巧用好,工作效率提高不少。通過上面的測試說明,oracle內建的一些函式,是經過相當程度的優化的。

instr(title,』aaa』)>0 

相當於like

instr(title,』aaa』)=0 

相當於not like

特殊用法:

select   id, name from users where instr('101914, 104703', id) > 0; 

它等價於

select   id, name from users where id = 101914 or id = 104703;

like 模糊查詢

sql 模糊查詢 逗號,在sql中like中不需要轉義,但是如果 在sql中的某個欄位值用 分隔資料,需要獲取資料的時候直接把 拆分成資料,獲得乙個資料的list。例如 需要查詢某欄位是否包含乙個值,111是否存在於1111,2111,1112,1121,1113這個欄位中 因為根據 逗號分開,要求...

like模糊查詢

逗號,在sql中like中不需要轉義,但是如果 在sql中的某個欄位值用 分隔資料,需要獲取資料的時候直接把 拆分成資料,獲得乙個資料的list。例如 需要查詢某欄位是否包含乙個值,111是否存在於1111,2111,1112,1121,1113這個欄位中 因為根據 逗號分開,要求的答案是 不在字段...

Oracle 模糊查詢like

在這個資訊量劇增的時代,如何幫助使用者從海量資料中檢索到想要的資料,模糊查詢是必不可少的。那麼在 中模糊查詢是如何實現的呢?一 我們可以在where子句中使用like關鍵字來達到oracle模糊查詢的效果 在where子句中,可以對datetime char varchar欄位型別的列用like關鍵...