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