对lIKE语句的优化
在大表中,進行模糊查詢,一般情況下是用LIKE'%%',但是這個東西走的是全表掃描,如果在數據量非常大的情況下,效率特別慢,因此,嘗試用ORACLE函數INSTR()來解決。
實驗步驟如下:
首先構造一張百萬行的表。
SQL> insert into emp2 select * from emp2;
1032192 rows inserted
如上所示,構造完成
接下來連續運用多個LIKE查詢來模糊匹配
SQL> select * from emp2 where job like '%RE%' and ename like '%A%' and mgr like '%3%';
EMPNO ENAME????? JOB???????? MGR HIREDATE????????? SAL????? COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------
Executed in 1.859 seconds
如上所示,LIKE查詢一次,就走一次全表掃描,效率非常慢
同樣的效果,現在來換做INSTR函數來執行
SQL> select * from emp where instr(job,'RE')>0 and instr(ename,'A')>0 and instr(mgr,'3')>0;
EMPNO ENAME????? JOB???????? MGR HIREDATE????????? SAL????? COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------
Executed in 0.063 seconds
看到了吧,,時間上的差異很明顯,INSTR在一瞬間執行完成,因為這個是查找的字段,而非走全表掃描
看來,oracle 內部函數效率還是高些。
?
因此,大家以后碰到同樣的問題,除了全文檢索外,這個也是個好方式
注意:
??? select?? id, name from users where instr(id, '101') > 0;?
???????? 等價于
????????? select?? id, name from users where id like '%101%'
?
注:比較mysql中locate函數
轉載于:https://www.cnblogs.com/prvin/archive/2012/09/28/2706760.html
總結
以上是生活随笔為你收集整理的对lIKE语句的优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jieba分词的原理
- 下一篇: Silverlight 5 Featur