提高sql查询性能-使用instr函数替换like
2015-07-28 21:51
302 查看
在查询时经常使用like作为关键字进行模糊查询,在生产环境中由于数据量较大,使用like查询时比较慢,尝试了一些方法,最终发现使用oracle的instr函数可以显著提高查询的效率.
关于数据量:
SELECT count(1) FROM t_partner_role;
--612565
SELECT count(1) FROM T_VENDOR_REPOSITORY;
--1178044
sql语句查询时间比较:
SELECT count(id)
from (select t.id
FROM T_VENDOR_REPOSITORY t
WHERE t.deleted = 0
and t.partnerid in (select distinct (tpr.partnerid)
from t_partner_role tpr
where tpr.partnerroletype in (1)
and tpr.deleted = 0)
and t.VENDORNAME like '%拓维信息系统股份有限公司%');
--使用like查询耗时 1.570ms
SELECT count(id)
from (select t.id
FROM T_VENDOR_REPOSITORY t
WHERE t.deleted = 0
and t.partnerid in (select distinct (tpr.partnerid)
from t_partner_role tpr
where tpr.partnerroletype in (1)
and tpr.deleted = 0)
and instr(t.VENDORNAME,'拓维信息系统股份有限公司',1,1)!=0);
--使用instr查询耗时
0.654ms
通过真实数据的比较发现使用instr的查询效率要高于like,以后再优化like查询时可以考虑.
关于数据量:
SELECT count(1) FROM t_partner_role;
--612565
SELECT count(1) FROM T_VENDOR_REPOSITORY;
--1178044
sql语句查询时间比较:
SELECT count(id)
from (select t.id
FROM T_VENDOR_REPOSITORY t
WHERE t.deleted = 0
and t.partnerid in (select distinct (tpr.partnerid)
from t_partner_role tpr
where tpr.partnerroletype in (1)
and tpr.deleted = 0)
and t.VENDORNAME like '%拓维信息系统股份有限公司%');
--使用like查询耗时 1.570ms
SELECT count(id)
from (select t.id
FROM T_VENDOR_REPOSITORY t
WHERE t.deleted = 0
and t.partnerid in (select distinct (tpr.partnerid)
from t_partner_role tpr
where tpr.partnerroletype in (1)
and tpr.deleted = 0)
and instr(t.VENDORNAME,'拓维信息系统股份有限公司',1,1)!=0);
--使用instr查询耗时
0.654ms
通过真实数据的比较发现使用instr的查询效率要高于like,以后再优化like查询时可以考虑.
相关文章推荐
- NoSQL数据库使用心得
- Oracle学习笔记+作业
- win8 x64下安装mysql-workbench 5.2无法运行问题
- MySql IFNULL 联表查询出来的null 如何赋值
- memcached LRU队列状态转换
- 【云快讯】之五十四《AWS提供Aurora数据库替代开源的MySQL》
- 数据库中的锁
- (转)数据库中的锁
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
- jdbc连接数据库
- MYSQL删除重复数据
- mysql中sql语句
- [MySQL]LeetCode196 Delete Duplicate Emails
- oracle connect by 说明
- SYS_CONNECT_BY_PATH函数用法 ORACLE
- MongoDB数据库,windows平台的安装
- ORACLE-015:ora-25153 临时表空间为空,ora01652 无法通过128
- Oracle学习 1
- oracle常见问题:varchar2 char的区别
- 关于PostgrepSQL