当前位置: 移动技术网 > IT编程>数据库>MSSQL > sql优化之使用like实现模糊查询的教程【亲测有效】

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

2018年02月24日  | 移动技术网IT编程  | 我要评论

无限兑换戒指,吉米网,举牌女郎性感俯身整衣遭拍显尴尬

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网