对lIKE语句的优化
在大表中,進(jìn)行模糊查詢,一般情況下是用LIKE'%%',但是這個(gè)東西走的是全表掃描,如果在數(shù)據(jù)量非常大的情況下,效率特別慢,因此,嘗試用ORACLE函數(shù)INSTR()來(lái)解決。
實(shí)驗(yàn)步驟如下:
首先構(gòu)造一張百萬(wàn)行的表。
SQL> insert into emp2 select * from emp2;
1032192 rows inserted
如上所示,構(gòu)造完成
接下來(lái)連續(xù)運(yùn)用多個(gè)LIKE查詢來(lái)模糊匹配
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查詢一次,就走一次全表掃描,效率非常慢
同樣的效果,現(xiàn)在來(lái)?yè)Q做INSTR函數(shù)來(lái)執(zhí)行
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
看到了吧,,時(shí)間上的差異很明顯,INSTR在一瞬間執(zhí)行完成,因?yàn)檫@個(gè)是查找的字段,而非走全表掃描
看來(lái),oracle 內(nèi)部函數(shù)效率還是高些。
?
因此,大家以后碰到同樣的問(wèn)題,除了全文檢索外,這個(gè)也是個(gè)好方式
注意:
??? select?? id, name from users where instr(id, '101') > 0;?
???????? 等價(jià)于
????????? select?? id, name from users where id like '%101%'
?
注:比較mysql中l(wèi)ocate函數(shù)
轉(zhuǎn)載于:https://www.cnblogs.com/prvin/archive/2012/09/28/2706760.html
總結(jié)
以上是生活随笔為你收集整理的对lIKE语句的优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jieba分词的原理
- 下一篇: Silverlight 5 Featur