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

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

索引设计的步骤

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

相关文章

来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3145
来自专栏魂祭心

原 canvas绘制clock

4084
来自专栏落花落雨不落叶

canvas画简单电路图

62011
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5476
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6838
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2772
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2070
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4708
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4868

扫码关注云+社区