发信人: chao_ping(canisaylove)
整理人: tidycc(2001-03-11 19:07:52), 站内信件
|
Oracle中如何侦测不平衡的索引
一个不平衡的索引由于它们近视的索引直使得许多的记录成块地聚集在一起.当索引不平衡时,部分索引较
其它索引更常被存取,这可能发生磁盘竞争,利用ANALYZE INDEX INDEX_NAME COMPUTE|ESTIMATE STATISTICS
可在索引上收集统计资料.统计出现的USER_INDEXES,ALL_INDEXES和DBA_INDEXES资料字典视图中。此外,附加
的统计可用VALIDATE INDEX INDEX_NAME叙述来放至INDEX_STATS视图中。
1.执行SQL *PLUS 建立表MES0008,索引MES0008_INDEX.
2.MES0008_INDEX收集统计资料,对于大的索引(表超过10丌条记录)使用ESTIMATE 取代COMPUTE以加速反应时
间
SQL>ANALYZE INDEX &owner..&index_name
COMPUTE STATISTICS
SQL>/
Enter value for owner:MES
Enter value for index_name:MES0008_INDEX
Index Analyzed.
SQL>
3.此时,统计资料将显示索引是良好平衡,因为没有记录,你可以查询DBA_INDEXSES数据字典确定统计资料。
SQL>SELECT BLEVEL,DECODE(BLEVEL,0,'OK BLEVEL',
1,'OK BLEVEL',
2,'OK BLEVEL',
3,'OK BLEVEL',
4,'OK BLEVEL','LEVEL IS TOO HIGH') OK
FROM DBA_INDEXES
WHERE INDEX_NAME='&index_name' AND
OWNER='&owner'
SQL>/
Enter name for index_name:MES0008_INDEX
Enter name from owner: MES
HEIGHT OK
0 OK BLEVEL
1 row selected.
可以看到BLEVEL 0 为OK,BLEVEL是B-TRIEVE索引格式的一部分与时间有关的数值,当找一条特定的记录时,
ORACLE必须限制在索引上的收索,对每一个BLEVEL都需要一次各自的存取.如果BLEVEL大于4时,建议重建索引.
4.只有BLEVEL被审查.要更进一步决定索引是否平衡,就进一步收集资料.
SQL>VALIDATE INDEX &owner..&index_name
SQL>/
Enter value for owner:MES
Enter value for index_name:MES0008_INDEX
Index analyzed.
SQL>
5.此时,INDEX_STATS视图会有目前的MES0008_INDEX索引的统计资料。以下例子是删除业记录是的查询讯息和
总记录比较。
SQL>SELECT DEL_LF_ROWS*100/DECODE((DEL_LF_ROWS+LF_ROWS),0,1,
DEL_LF_ROWS+LF_ROWS)) PCT_DELETED,
(LF_ROWS-DISTINCT_KEYS)*100/DECODE(LF_ROWS,0,1,LF_ROWS) DISTINCTIVENESS
FROM INDEX_STATS
WHERE NAME='&index_name'
Enter values for index_name:MES0008_INDEX
PCT DELETED DISTINCTIVENESS
----------------------------------------
0 0
SQL>
PCT_DELETED字段显示叶记录已经被删除和保持未满的百分比.在一个索引上越多的删除项目会使索引变得越
不平衡。如果PCT_DELETED为20%或更高,该索引就成为重建索引的后选择.你可以用估计(ESITIMATING)或计算
(COMPUTING)统计的方式来收集表格上的索引统计资料.当你登出资料库,所有资料将从INDEX_STATS视图中移出。
---- OraParameter 绑定在SQL语句或PL/SQL块中的有关变
---- 看看vivian
听听雨声
很久没有这样了,
唉,生活...... |
|