前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >郑保卫 - 索引优化策略及实战

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

作者头像
数据和云
发布2018-03-06 18:02:33
6860
发布2018-03-06 18:02:33
举报
文章被收录于专栏:数据和云数据和云数据和云

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

索引设计的步骤

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 的详细信息(新增的索引,删除的索引,修改的索引,保留的索引)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档