欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sql优化之使用like实现模糊查询的教程【亲测有效】

程序员文章站 2022-03-31 09:30:39
sql语句中用来实现模糊查询,可以在where了句中使用like来达到模糊查询的效果。 可以使用两个通配符: % 零个或多个字符 _ 单一任何字符(下划线) ----------...

sql语句中用来实现模糊查询,可以在where了句中使用like来达到模糊查询的效果。

可以使用两个通配符: % 零个或多个字符 _ 单一任何字符(下划线) ------------------------------where a.upload_path 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%'

测试结果:

select * from gt_alarm where alarm_date like '%2016/4/3%'; --11s

select * from gt_alarm where instr(alarm_date,'2016/4/3')>0; --9s

select * from gt_alarm where alarm_person like '%xiuxianxi%';--11s

select * from gt_alarm where instr(alarm_person,'xiuxianxi')>0;--8s

通过结果,管中窥豹,可见一斑。