设为首页 加入收藏

TOP

Oracle索引质量分析(一)
2014-11-24 02:33:04 来源: 作者: 【 】 浏览:4
Tags:Oracle 索引 质量 分析

索引质量的高低对数据库整体性能有着直接的影响。良好高质量的索引使得数据库性能得以数量级别的提升,而低效冗余的索引则使得数据库性能缓慢如牛,即便是使用高档的硬件配置。因此对于索引在设计之初需要经过反复的测试与考量。那对于已经置于生产环境中的数据库,我们也可以通过查询相关数据字典得到索引的质量的高低,通过这个分析来指导如何改善索引的性能。下面给出了演示以及索引创建的基本指导原则,最后给出了索引质量分析脚本。

1、查看索引质量

--获取指定schema或表上的索引质量信息报告
gx_adm@CABO3> @idx_quality
Enter value for input_owner: GX_ADM
Enter value for input_tbname: CLIENT_TRADE_TBL  -->如果我们省略具体的表名则会输出整个schema的索引质量报告

                                 Table      Table                             Index Data Blks Leaf Blks        Clust Index
Table                             Rows     Blocks Index                     Size MB   per Key   per Key       Factor Quality
------------------------- ------------ ---------- ------------------------- ------- --------- --------- ------------ -------------
CLIENT_TRADE_TBL             6,318,035     278488 I_TDCL_ARC_STL_DATE_STOCK      62       312        13      171,017 5-Excellent
                                                  I_TDCL_ARC_STL_DATE_CASH       62       318        13      174,599 5-Excellent
                                                  I_TDCL_ARC_CANCEL_DATE         83       238         8      288,678 5-Excellent
                                                  I_TDCL_ARC_INPUT_DATE         144       249        13      310,974 5-Excellent
                                                  I_TDCL_ARC_TRADE_DATE         144       269        14      337,097 5-Excellent
                                                  PK_CLIENT_TRADE_TBL           200         1         1      798,216 2-Good
                                                  I_TDCL_ARC_GRP_REF_ID         144         1         1      811,468 2-Good
                                                  UNI_TDCL_ARC_REF_ID           136         1         1      765,603 2-Good
                                                  I_TDCL_ARC_CONTRACT_NUM        72         1         1      834,491 2-Good
                                                  I_TDCL_ARC_SETTLED_DATE        61       299         5      380,699 1-Poor
                                                  I_TDCL_ARC_ACC_NUM            184       624         3    3,899,446 1-Poor
                                                  I_TDCL_ARC_PL_STK             176       218         1    4,348,804 1-Poor
                                                  I_TDCL_ARC_INSTRU_ID          120     2,667         8    4,273,038 1-Poor

--从上面的单表输出的索引质量可知,出现了4个处于Poor级别的索引,也就是说这些个索引具有较大的聚簇因子,几乎接近于表上的行了
--对于这几个索引的质量还应结合该索引的使用频率来考量该索引存在的必要性
--对于聚簇因子,只能通过重新组织表上的数据来,以及调整相应索引列的顺序得以改善
             
--查询单表上索引列的相关信息             
gx_adm@CABO3> @idx_info
Enter value for owner: GX_ADM
Enter value for table_name: CLIENT_TRADE_TBL

TABLE_NAME                INDEX_NAME                     CL_NAM               CL_POS STATUS   IDX_TYP         DSCD
------------------------- ------------------------------ -------------------- ------ -------- --------------- ----
CLIENT_TRADE_TBL          I_TDCL_ARC_ACC_NUM           ACC_NUM                   1 VALID    NORMAL          ASC
                          I_TDCL_ARC_CANCEL_DATE       CANCEL_DATE               1 VALID    NORMAL          ASC
                          I_TDCL_ARC_CONTRACT_NUM      CONTRACT_NUM              1 VALID    NORMAL          ASC
                          I_TDCL_ARC_GRP_REF_ID        GRP_REF_ID                1 VALID    NORMAL          ASC
                          I_TDCL_ARC_INPUT_DATE        INPUT_DATE                1 VALID    NORMAL          ASC
                          I_TDCL_ARC_INSTRU_ID         INSTRU_ID                 1 VALID    NORMAL          ASC
                          I_TDCL_ARC_PL_STK            STOCK_CD                  1 VALID    NORMAL          ASC
                          I_TDCL_ARC_PL_STK            PL_CD                     2 VALID    NORMAL          ASC
                          I_TDCL_ARC_SETTLED_DATE      SETTLED_DATE              1 VALID    NORMAL          ASC
                          I_TDCL_ARC_STL_DATE_CASH     STL_DATE_CASH             1 VALID    NORMAL          ASC
                          I_TDCL_ARC_STL_DATE_STOCK    STL_DATE_STOCK            1 VALID    NORMAL          ASC
                          I_TDCL_ARC_TRADE_DATE        TRADE_DATE                1 VALID    NORMAL          ASC
                          PK_CLIENT_TRADE_TBL          BUSINESS_DATE             1 VALID    NORMAL          ASC
                          PK_CLIENT_TRADE_TBL          REF_ID                    2 VALID    NORMAL          ASC
                          UNI_TDCL_ARC_REF_ID          REF_ID                    1 VALID    NORMAL          ASC
                        
--从上面的查询结果可知,当前表TRADE_CLIENT_TBL上含有13个索引,应该来说该表索引存在一定冗余。
--大多数情况下,单表上6-7个索引是比较理想的。过多的索引导致过大的资源开销,以及降低DML性能。 
--script name: idx_quality.sql     --Author : Leshami  --Blog: http://blog.csdn.net/leshami 
--index quality retrieva l
SET LINESIZE 145
SET PAGESIZE 1000
SET VERIFY OFF

CLEAR COMPUTES
CLEAR BREAKS

BREAK ON table_name ON num_rows ON blocks

COLUMN owner FORMAT a14 HEADING 'Index owner'
COLUMN table_name FORMAT a25 HEADING 'Table'
COLUMN index_name FORMAT a25 HEADING 'Index'
COLUMN num_rows FORMAT 999G999G990 HEADING 'Table|Rows'
COLUMN MB FORMAT 9G990 HEADING 'Index|Size MB'
COLUMN blocks HEADING 'Table|Blocks'
COLUMN num_blocks FORMAT 9G990 HEADING 'Data|Blocks
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇CentOs系统下数据库导入导出 下一篇Oracle学习笔记6--分组函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: