
晚上接到同事电话,正在上线的某应用系统出现性能瓶颈,经反馈某条频繁查询的SQL语句10秒以上才能反馈结果,用户体验感肯定是不能接受呗。
接到具体SQL语句后,简单分析一下,由于改程序时间窗口不够,只能先通过其它手段来临时处理一下。
具体SQL语句如下:
select *
from xxx a
where 1 = 1
and a.startdate >= to_date('2020-08-01', 'yyyy-MM-dd')
AND EXISTS (SELECT 1
FROM yyy b
WHERE b.policyno = a.policyno
and b.insuredFlag = '1'
and b.mobile = '88888888')
执行计划如下(请忽略我用windows画笔做的脱敏处理.....)
TABLE ACCESS FULL全表扫描耗费了大量的资源,检查两张表的结构,数据分布情况和索引后,决定一个组合索引应该可以临时解决。
CREATE INDEX user.INDEX_PIII ON user.yyy
(INSUREDFLAG, mobile)
LOGGING
TABLESPACE xxxx_IDX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 21824K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOPARALLEL;
索引后的执行计划如下:(请再次忽略我用windows画笔做的脱敏处理.....)

至于提升了多少倍的查询效率,各位同学自己估算,大概就是100000/50这个样子吧。
BTW,公司群里刚讨论了一下云计算+区块链+大数据(含超算技术)+自动化运维;未来几年会在这些方面发力。江湖中认识我的和不认识我的各位大神们,可以联系我,共同学习发展。




