如何优化Like语句的模糊查询
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
耗时:1.859秒
如上所示,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
耗时:0.063秒
时间上的差异很明显,INSTR在一瞬间执行完成,因为这个是查找的字段,而非走全表扫描。