<海量数据库解决方案>2011041201

【摘抄】

索引选定的步骤

索引并不仅仅是为了特定的应用程序或特定的读取类型而创建的,在搜集读取类型时不仅要考虑现在正在使用的,也要顾及未来有可能出现的读取类型,通过对现有和可能出现的读取类型进行综合性的分析来创建战略性的索引。

系统性的索引选定步骤如下所示:
1、全面搜集表的读取类型
    在开发阶段中,适当建立主键和索引。
        搜集读取类型的方法:
        A、从已编写好的SQL中进行搜集
        B、用下列方法来预测
            寻找被反复执行的读取类型
                被反复执行的读取类型主要包括表连接、子查询、嵌套循环连接中位于内循环的迅即读取等。如何查找?在表连接中的连接条件中所使用的主键、外键在这种类型的读取中出现的概率最大,以及出现在子查询的SELECT-List中的列,或者通过对循环中所出现的反复执行情况进行寻找。【实际中,有多少种读取类型?后续回答】
            选拔出离散度比较好的列,并对其读取类型进行调查
                【怎么判断列的离散度?后续回答】
            寻找经常被赋予较大范围的查询条件
            抽出查询条件中的主要列,并对其读取类型进行调查
            对经常需要组合使用的列的组合类型以及排序顺序进行调查
            寻找需要按照降序输出的情况
            为了获取统计信息而对读取类型进行调查
    在运行阶段中,又如何搜集?
    运行阶段是指大部分的应用程序已经开发结束,能够直接从应用程序所使用的SQL中搜集到读取类型。
        搜集方法如下:
        A、从应用程序的代码中抽出SQL之后,将其存储在专门用来分析的表中。
        B、解析SQL-TRACE文件,获取SQL语句、执行计划、使用的索引、执行次数、查询范围等详细信息。
        C、从共享池中直接寻找SQL的方法非常简便,该方法的最大优点就是它不仅不受一般编程语言的影响,而且与解析TRACE文件的方法相比可以在较长的期间内使用。
    以表为单位输出所搜集到的SQL并记录读取类型
        建议找一个自动分析工具来使用。可以g哈
2、选定索引列对象并调查其离散度
    选定索引对象列的准则:
        在读取类型中频繁出现的列
        在索引的前面必须要指定的列
        预测对执行速度有影响的的其他列
3、为特殊读取类型选定索引
    最先解决的问题就是寻找反复执行的读取类型(Critical Access Path)
    反复读取的代价=单次执行代价*执行次数
    PS:关于书中的图4-10所示,可以自己看下怎么对应整理一份在工作中的样表[后续处理]
4、检查聚簇
    索引的最大缺陷就是在使用它读取大范围数据时,会发生大量的随机读取,使得执行速度急剧下降。------聚簇就是为了解决此缺陷。
    聚簇:为了提高聚集而将大量具有相同列值的行存储在同一个单位聚簇中“单表聚簇”。
5、组合索引的构成及索引列序的决定
    为无法找到主导作用的列,只能按照普通列来实现提高执行速度的目标------组合索引就是解决方案
6、试验和测试
7、调查和修改相关应用程序
8、统一应用

按照系统所处阶段的不同可将索引的构建工作分为两大类:
其一,在应用程序的开发阶段进行的新索引创建
其二,在系统的运行阶段为了实现系统的最优化所进行的索引重构

posted @ 2011-04-12 09:41  西就东城  阅读(214)  评论(0编辑  收藏  举报