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

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

相關文章
相關標籤/搜索