Oracle索引质量介绍和分析脚本分享
AND owner = upper('&owner')
这篇文章主要介绍了Oracle索引质量介绍和分析脚本分享,索引质量的高低对数据库整体性能有着直接的影响,本文给出了演示以及索引创建的基本指导原则,最后给出了索引质量分析脚本,需要的朋友可以参考下
blocks,
COLUMN clustering_factor FORMAT 999G999G990 HEADING 'Clust|Factor'
SET LINESIZE 145
Enter value for input_tbname: CLIENT_TRADE_TBL -->如果我们省略具体的表名则会输出整个schema的索引质量报告
Table Rows Blocks Index Size MB per Key per Key Factor Quality
------------------------- ------------ ---------- ------------------------- ------- --------- --------- ------------ -------------
I_TDCL_ARC_PL_STK STOCK_CD 1 VALID NORMAL ASC
ORDER BY 2, 4;
b.status,
WHEN NVL (t.num_rows, 0) = 0 THEN '0-No Stats'
CLEAR BREAKS
I_TDCL_ARC_SETTLED_DATE 61 299 5 380,699 1-Poor
I_TDCL_ARC_CANCEL_DATE CANCEL_DATE 1 VALID NORMAL ASC
WHEN NVL (i.clustering_factor, 0) = 0 THEN '0-No Stats'
END
i.index_name,
COLUMN avg_data_blocks_per_key FORMAT 999G990 HEADING 'Data Blks|per Key'
--对于聚簇因子,只能通过重新组织表上的数据来,以及调整相应索引列的顺序得以改善
t.num_rows,
index_quality DESC;
--get the index column information by specified table
收集表上所有查询的各种不同组合,找出具有最佳离散度的列(或主键列等)创建单索引
col cl_pos format 9
Enter value for input_owner: GX_ADM
FROM dba_ind_columns a, dba_indexes b
COLUMN index_name FORMAT a25 HEADING 'Index'
UNI_TDCL_ARC_REF_ID REF_ID 1 VALID NORMAL ASC
set linesize 180
COLUMN table_name FORMAT a25 HEADING 'Table'
a.index_name,
对于频繁读取而缺乏比较理想离散值的列为其创建组合索引
I_TDCL_ARC_STL_DATE_CASH STL_DATE_CASH 1 VALID NORMAL ASC
BREAK ON table_name ON num_rows ON blocks
ELSE '1-Poor'
哪些列会作为附件性列被添加
对于组合索引应考虑下列因素来制定合理的索引列顺序,以下优先级别由高到低来作为索引的前导列,第二列等等
Enter value for table_name: CLIENT_TRADE_TBL
3、索引质量分析脚本
COLUMN MB FORMAT 9G990 HEADING 'Index|Size MB'
AND i.owner = o.owner
a.column_name cl_nam,
--查询单表上索引列的相关信息
WHERE
该列是否经常使用“ = ”作为常用查询条件
I_TDCL_ARC_ACC_NUM 184 624 3 3,899,446 1-Poor
I_TDCL_ARC_TRADE_DATE 144 269 14 337,097 5-Excellent
TABLE_NAME INDEX_NAME CL_NAM CL_POS STATUS IDX_TYP DSCD
I_TDCL_ARC_TRADE_DATE TRADE_DATE 1 VALID NORMAL ASC
AND t.owner = UPPER('&input_owner')
col table_name format a25
t.blocks,
PK_CLIENT_TRADE_TBL 200 1 1 798,216 2-Good
I_TDCL_ARC_INPUT_DATE INPUT_DATE 1 VALID NORMAL ASC
COLUMN num_rows FORMAT 999G999G990 HEADING 'Table|Rows'
WHEN (ROUND (i.clustering_factor / t.num_rows * 100)) BETWEEN 12 AND 15 THEN '2-Good'
组合列经常按何种顺序排序
num_rows,
AND i.index_name = o.segment_name
SET VERIFY OFF
index_quality
I_TDCL_ARC_STL_DATE_STOCK STL_DATE_STOCK 1 VALID NORMAL ASC
col idx_typ format a15
WHEN (ROUND (i.clustering_factor / t.num_rows * 100)) BETWEEN 7 AND 11 THEN '4-Very Good'
AND a.table_name LIKE upper('%&table_name%')
-- i.index_name LIKE UPPER ('%&&1%') AND
I_TDCL_ARC_INPUT_DATE 144 249 13 310,974 5-Excellent
CLIENT_TRADE_TBL 6,318,035 278488 I_TDCL_ARC_STL_DATE_STOCK 62 312 13 171,017 5-Excellent
ORDER BY table_name,
SELECT b.table_name,
COLUMN num_blocks FORMAT 9G990 HEADING 'Data|Blocks'
COLUMN Index_Quality FORMAT A13 HEADING 'Index|Quality'
b.index_type idx_typ,
gx_adm@CABO3> @idx_info
PK_CLIENT_TRADE_TBL REF_ID 2 VALID NORMAL ASC
------------------------- ------------------------------ -------------------- ------ -------- --------------- ----
I_TDCL_ARC_CANCEL_DATE 83 238 8 288,678 5-Excellent
COLUMN avg_leaf_blocks_per_key FORMAT 999G990 HEADING 'Leaf Blks|per Key'
--从上面的查询结果可知,当前表TRADE_CLIENT_TBL上含有13个索引,应该来说该表索引存在一定冗余。
UNI_TDCL_ARC_REF_ID 136 1 1 765,603 2-Good
col cl_nam format a20
WHEN (ROUND (i.clustering_factor / t.num_rows * 100)) < 6 THEN '5-Excellent'
CASE
i.clustering_factor,
--从上面的单表输出的索引质量可知,出现了4个处于Poor级别的索引,也就是说这些个索引具有较大的聚簇因子,几乎接近于表上的行了
--SPOOL OFF;
--script name: idx_quality.sql --Author : Leshami --Blog:
COLUMN blocks HEADING 'Table|Blocks'
WHEN (ROUND (i.clustering_factor / t.num_rows * 100)) BETWEEN 16 AND 25 THEN '2-Fair'
PK_CLIENT_TRADE_TBL BUSINESS_DATE 1 VALID NORMAL ASC
o.bytes / 1048576 mb,
索引质量的高低对数据库整体性能有着直接的影响。良好高质量的索引使得数据库性能得以数量级别的提升,而低效冗余的索引则使得数据库性能缓慢如牛,即便是使用高档的硬件配置。因此对于索引在设计之初需要经过反复的测试与考量。那对于已经置于生产环境中的数据库,我们也可以通过查询相关数据字典得到索引的质量的高低,通过这个分析来指导如何改善索引的性能。下面给出了演示以及索引创建的基本指导原则,最后给出了索引质量分析脚本。
CLIENT_TRADE_TBL I_TDCL_ARC_ACC_NUM ACC_NUM 1 VALID NORMAL ASC
I_TDCL_ARC_CONTRACT_NUM CONTRACT_NUM 1 VALID NORMAL ASC
FROM dba_indexes i, dba_segments o, dba_tables t
gx_adm@CABO3> @idx_quality
===========================================================================================
i.avg_leaf_blocks_per_key,
Enter value for owner: GX_ADM
--index quality retrieval
--对于这几个索引的质量还应结合该索引的使用频率来考量该索引存在的必要性
I_TDCL_ARC_PL_STK 176 218 1 4,348,804 1-Poor
CLEAR COMPUTES
i.avg_data_blocks_per_key,
I_TDCL_ARC_SETTLED_DATE SETTLED_DATE 1 VALID NORMAL ASC
--SPOOL index_quality
a.column_position cl_pos,
Table Table Index Data Blks Leaf Blks Clust Index
I_TDCL_ARC_INSTRU_ID INSTRU_ID 1 VALID NORMAL ASC
SET PAGESIZE 1000
2、索引创建的基本指导原则
I_TDCL_ARC_CONTRACT_NUM 72 1 1 834,491 2-Good
1、查看索引质量
索引的创建应遵循精而少的原则
I_TDCL_ARC_PL_STK PL_CD 2 VALID NORMAL ASC
I_TDCL_ARC_INSTRU_ID 120 2,667 8 4,273,038 1-Poor
AND t.table_name LIKE UPPER('%&input_tbname%')
AND i.table_name = t.table_name
列上的离散度
COLUMN owner FORMAT a14 HEADING 'Index owner'
I_TDCL_ARC_GRP_REF_ID 144 1 1 811,468 2-Good
i.owner = t.owner
I_TDCL_ARC_GRP_REF_ID GRP_REF_ID 1 VALID NORMAL ASC
a.descend dscd
--大多数情况下,单表上6-7个索引是比较理想的。过多的索引导致过大的资源开销,以及降低DML性能。
--script name: idx_info.sql
SELECT i.table_name,
I_TDCL_ARC_STL_DATE_CASH 62 318 13 174,599 5-Excellent
WHERE a.index_name = b.index_name
列被使用的频率
相关热词: oracle
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/oracle/1260.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
Window下Oracle Database 11g 发行
时间:2020-12-29
-
Oracle如何实现like多个值的
时间:2020-12-29
-
maven添加oracle依赖失败问题
时间:2020-12-29
-
OracleRAC基本概念及入门
时间:2020-12-29
-
Azure File Storage 基本用法
时间:2020-12-26
-
Oracle 权限(grant revoke)
时间:2020-12-26
-
Azure Queue Storage 基本用法
时间:2020-12-26
-
如何对比迁移前后的Orac
时间:2020-12-26
热门文章
-
Azure Queue Storage 基本用法 Azure Storage 之
时间:2020-12-26
-
Oracle存储过程编程详解
时间:2020-12-07
-
win10下oracle 11g安装图文教程
时间:2020-12-25
-
oracle 数据库学习 基本结构介绍
时间:2020-12-13
-
Azure File Storage 基本用法 Azure Storage 之 F
时间:2020-12-26
-
windows使用sqlpus连接oracle 数据库的教程图
时间:2020-12-25
-
Window下Oracle Database 11g 发行版2安装教程
时间:2020-12-29
-
Oracle解锁的方式介绍
时间:2020-12-14
-
linux下oracle设置开机自启动实现方法
时间:2020-12-13
-
Oracle学习记录之使用自定义函数和触发器
时间:2020-12-07
