在查询时经常使用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查询时可以考虑.
通过对比发现,在大规模数据集上使用Oracle的INSTR函数代替LIKE操作符能显著提高模糊查询的速度。实测显示,在特定场景下,查询耗时从1.570毫秒减少到0.654毫秒。
161

被折叠的 条评论
为什么被折叠?



