郑保卫 - 索引优化策略及实战

本文中将要介绍的索引战略方案是以尽可能少的索引来满足尽可能多的数据读取类型的索引构建方法。这个策略方案要求在构建索引时,尽可能多地搜集当前正在使用的未来将要出现的数据读取要求。

索引设计的步骤

1. 针对目标数据库的 SGA 进行搜集,主要的搜集信息有表的信息,索引信息,SQL 语句,绑定变了,SQL 的执行计划,以及表的列的统计信息等。 2. 由解析引擎进行解析,解析出读取路径(ACCESS PATH),针对解析出来的成果,根据相应的纬度,确定出优化对象表 3. 针对确定出来的优化对象,进行索引优化设计 4. 产出索引设计指南,SQL 优化指南,并在评审通过后应用到生产环境

读取路径(ACCESS PATH)是,就是 SQL 语句中就是谓词条件,基于表,会有不同的访问路径组合和分组,这些读取路径都是在 SQL 语句里面涉及到相关表的所有读取路径的组合,综合分析 SQL 中使用的条件语句和分组之后,进行索引设计。

对于搜集的 ASIS 的 index 和搜集的 AP 进行分析,是进行索引设计时首先需要进行的工作,通过对每张表里的所有种类的读取路径的组合进行分析,查看里面的所有的语句,现有的索引是否被执行计划用上以及是否合理,并调整为 ToBe-Index,对于能够应用原有索引的应尽量复用。

针对没有使用上索引的读取路径组合单独进行索引设计并根据结果构建 ToBe-Index。

对于没有被执行计划使用上的索引,理论上是应该删除,但是这些索引在删除时必须要确认没有 SQL 使用或者很少被使用到才可以删除,需进行评估后才能执行删除动作。

在索引设计的过程中,作为首先靠考虑的索引的第一列应该选取哪一个,应该是离散度好(值的种类多)和使用频率高的,在上面的例子中,CUST_NO,PRICE_STD,BNK_CD,BSE_CRD_NO 的离散度较好,使用较为频繁,适合作为索引的第一列,那么产生索引就有四种,如果第一列的过滤能力无法达到很好的效果,那么就需要考虑建立组合索引,那么经过组合别的列,最终产生的索引为:

CUST_NO

PRICE_STD+BNK_CD+APR_DT

BNK_CD+ARP_DT+SND

BSE_CRD_NO

这4个索引,所以这4个索引就能已经能够满足目前表上面的所有的读取路径的组合。

最终的产出物中应当包含表上的所有的读取路径,ToBe-Index 映射到读取路径的映射关系,表上的列的统计信息,包含列名,离散度(种类)等信息,以及 ASIS-Index 和 ToBe-Index 的详细信息(新增的索引,删除的索引,修改的索引,保留的索引)

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-01-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏令仔很忙

手把手教你-----巧用Excel批量生成SQL语句,处理大量数据

在做系统或者做项目的时候,经常会遇到这样的要求:用户给我们发过来一些数据,要求我们把这些数据导入到数

3933
来自专栏数据和云

巧用复合索引,有效降低系统IO

我们知道索引至关重要,合理的索引使用能够在很大程度上改善数据库的性能。然而很多人都会走入这样一个误区:走索引的SQL语句的性能一定比全表扫描好。真的是这样吗?今...

3019
来自专栏Java后端技术栈

MySQL数据库开发常见问题及几点优化!

MySQL数据库是被广泛应用的关系型数据库,其体积小、支持多处理器、开源并免费的特性使其在Internet中小型网站中的使用率尤其高。在使用 MySQL的过程中...

811
来自专栏全栈工程师成长之路

深入浅出后端开发(MySQL篇)

38718
来自专栏杨建荣的学习笔记

MySQL中的反连接(r12笔记第45天)

关于Oracle的半连接,反连接,我一直认为这是一个能讲很长时间的话题,所以在我的新书《Oracle DBA工作笔记》中讲性能优化的时候,我花了不少的笔墨做...

2735
来自专栏杨建荣的学习笔记

一条delete语句的调优(r4笔记第86天)

今天刚上上班,就接到客户的邮件,说生产环境中执行某一条delete sql语句的时间超过了3个小时。最后客户无奈取消了这次数据清理,准备今天在申请时间重做。所以...

3755
来自专栏大愚Talk

MySQL InnoDB引擎锁的总结

我们开的的各式各样系统中,系统运行需要CPU、内存、I/O、磁盘等等资源。但除了硬资源外,还有最为重要的软资源:数据。

2323
来自专栏idba

死锁案例之六

死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋...

902
来自专栏Andy的技术专栏

MySQL 开发实践 8 问,你能 hold 住几个?

最近研发的项目对 DB 依赖比较重,梳理了这段时间使用 MySQL 遇到的8个比较具有代表性的问题。

8.8K5
来自专栏WindCoder

网易MySQL微专业学习笔记(十一)-MySQL业务优化与设计

这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL业务优化与设计”中的MySQL数据类型相关笔记。

1361

扫码关注云+社区

领取腾讯云代金券