案例纠正一则

原创
2021/02/25 07:50
阅读数 202

通过索引提升SQL性能案例一则》提到的案例,处理不太准确,有必要纠正下,更要谢谢老虎刘老师的耐心指正。


原始SQL,跑出的执行计划,是INDEX SKIP SCAN,确实是低效的,

select t.AGENT as agent,        nvl(sum(case        when t.operation_type = 'A' then 1 else 0 end),0) as        DflCount,        nvl(sum(case        when t.operation_type = 'B' then 1 else 0 end),0) as        IfCount,        nvl(sum(case        when t.operation_type = 'C' then 1 else 0 end),0) as        AecCount,        nvl(sum(case        when t.operation_type = 'D' then 1 else 0 end),0) as        BsCount                from OP_LOG t                where         t.code  = 'AA'        and t.ORI_CODE =  'ABC'        and t.T_DATE BETWEEN to_date('20201209','yyyymmdd') and to_date('20201209','yyyymmdd')        and IS_VALID = 1        and t.operation_type in ('A','B','C','D')                group by t.agent                 order by agent;


误区1,agent加到复合索引

因为原打算利用索引有序的特性,将agent加到索引中,利用复合索引(t_code, ori_code, t_date, t_no, agent),避免排序,但实际上,SQL中索引列条件t_date不是等值查询,而是范围查询,对这个复合索引来说,agent还可能是无序的。因此如果遵从“等值条件在前,范围条件在后”的索引构建原则,复合索引不应该加上agent,而可以考虑将operation_type加到索引中,并且放到t_date前。至于is_valid,number类型,长度定义为1,当前值都是1,放到索引access这个值,还是回表filter,我倒是觉得区别不会很大。


误区2,未考虑直方图

表中数据未必都是均匀分布的,尤其像operation_type的值,可能存在差异,因此还是需要看下检索字段的数据分布情况,如果存在倾斜,采集直方图,会对不同的值选择正确的执行计划有所帮助。


从这个案例来看,构建不同的索引,我们得到的优化程度是不同的,但是归根结底,还是需要踏实下来好好了解索引等这些知识的基本原理,结合实际问题,不断纠正自己错误的观念,对我来说,这条路上还是有很多积累和提升的地方。



近期更新的文章:

小白学习MySQL - 数据库软件和初始化安装

小白学习MySQL - 闲聊聊

Redis和Sentinel的安装部署和配置

“火线”和“零线”

通过索引提升SQL性能案例一则

如何手动添加jar包到maven本地库?

1元股权转让的一点思考

如何打造一个经常宕机的业务系统?

Linux恢复误删文件的操作

Linux的scp指令使用场景

Oracle处理IN的几种方式

如何搭建一支拖垮公司的技术团队?

IP地址解析的规则

MySQL的skip-grant-tables

国产数据库不平凡的一年

Oracle要求顺序的top数据检索问题

日常工作中碰到的几个技术问题

了解一下sqlhc

Oracle的MD5函数介绍

Oracle 19c的examples静默安装

sqlplus登录缓慢的解决

VMWare 11安装RedHat Linux 7过程中碰到的坑

COST值相同?是真是假?

Oracle 11g的examples静默安装

同名的同义词和视图解惑

v$和v_$的一些玄机


文章分类和索引:

公众号700篇文章分类和索引

本文分享自微信公众号 - bisal的个人杂货铺(gh_e8769c7350b1)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部