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

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

索引设计的步骤

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 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

java提高篇之异常(下)

Java确实给我们提供了非常多的异常,但是异常体系是不可能预见所有的希望加以报告的错误,所以Java允许我们自定义异常来表现程序中可能会遇到的特定问题,总之就是...

323
来自专栏微信公众号:Java团长

Java多线程的应用场景和应用目的举例

多线程用于堆积处理,就像一个大土堆,一个推土机很慢,那么10个推土机一起来处理,当然速度就快了,不过由于位置的限制,如果20个推土机,那么推土机之间会产生相互的...

591
来自专栏牛客网

后端开发:深入浅出的知识准备体系分享一、计算机网络二、数据库三、操作系统四、算法LINUX语言部分(PHP)项目

博主渣渣本科,挣扎到十一月秋招终于结束了。面过百度/腾讯/小米/网易/搜狗/知乎/京东/360/瓜子。期间总结了一些面试题目,现在放上来。由于是博主自己的面经记...

36014
来自专栏牛客网

2018秋招面经-后端开发

博主渣渣本科,挣扎到十一月秋招终于结束了。面过百度/腾讯/小米/网易/搜狗/知乎/京东/360/瓜子。期间总结了一些面试题目,现在放上来。由于是博主自己的面经记...

3579
来自专栏Linyb极客之路

分布式系统唯一ID生成方案汇总

系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会...

752
来自专栏Java架构

分布式超大规模数据的实时快速排序算法

2017
来自专栏Adamshuang 技术文章

Guava Cache -- Java 应用缓存神器

Guava 作为Google开源Java 库中的精品成员,在性能、功能上都十分出色,本文将从实际使用的角度,来对Guava进行讲解。

5277
来自专栏Linyb极客之路

2016年百度面试经历

第一轮面试 1. 简单介绍自己 这个没什么说的,主要都是从简历上面说一下,面试官也会根据简历进行提问 2. 想象一个场景:一个系统要同步美国(订单)和中国的数据...

3037
来自专栏文武兼修ing——机器学习与IC设计

流水线式p2p接口的分析与实现

P2P接口是一种双向握手接口,传输的前级和后级各提供一个数据有效信号valid和忙信号busy信号,只有当两个信号达成某种指定情况时,握手完成,数据传输完成,否...

562
来自专栏牛客网

2018秋招面经-后端开发

1375

扫描关注云+社区