【数据库】Oracle单表查询性能优化 - 索引应用

目录

问题说明

解决方案 - 场景A

解决方案 - 场景B

解决方案 - 场景C

深入理解索引 - 索引的逻辑结构

深入理解索引 - 索引的三个特点

深入理解索引 - 索引的注意事项


 

问题说明

系统上线后,用户数据不断增长,从最初的几十万记录发展至上千万、甚至上亿条记录。运维人员反馈原有的存储过程运行效率愈发低下。review时发现以下可改进之处:

场景A:数据表的索引与查询语句子条件(where)筛选字段无关,未合理创建索引; 

场景B:业务逻辑分析不足,产生非必要的表关联,50%的语句可改写为单表查询语句;

场景C:数据表本身已有相关索引,但在查询时未正确使用索引

 


 

各场景解决方案:  由于不方便用项目代码举例,以下sql涉及的字段名、数据表名均用别名替换。

 

场景A:.必要表连接 + 无索引,可调整为 必要表连接 + 索引检索

表b:file_name,file_month,file_type(索引I:file_month)

表d: fee,file_name,file_month(无索引)

 

   SELECT fee

        FROM d

   WHERE file_name IN  (SELECT file_name FROM b WHERE file_month=202002 and file_type= 'XXX');

 

【执行计划 - 必要表连接 + 无索引】

                              

优化分析】由于业务层面上,B与D表的file_month不等价,需保留表连接。执行计划中的索引扫描“INDEX(FAST FULL SCAN)”用到了b表的索引I(file_month),可在 表d 的file_name列新建索引提升查询性能。

新建索引】CREATE INDEX d_file_name_idx ON d (file_name) ;

执行计划 - 必要表连接 + 索引检索

                         

成本优化】:269416 --  1087

 


场景B非必要表连接  +  无索引 ,可调整为 无表连接 + 索引

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值