数据库对象统计分析技术应用

文章作者 100test 发表时间 2008:01:11 12:23:15
来源 100Test.Com百考试题网


ORACLE在执行SQL时如果使用成本方式分析则所有的成本分析信息来源依靠于系统的统计分析表(DBA_TABLES、DBA_INDEXES、DBA_TAB_COLUMNS)数据,如果说统计分析的数据是不准确的,那可能会使ORACLE分析出来的路径执行性能极差,所以统计分析数据是影响ORACLE性能极重要的信息。

统计分析主要包括产生表及索引的统计信息

表的统计信息主要包括表的行数,每行的平均长度(字节),空闲块,统计时间等信息

索引的统计信息主要包括行数、层数、叶块数、统计时间等信息。

另外ORACLE还可以统计列及数据不对称信息,9i还可以统计系统信息(CPU,I/O)

ORACLE执行成本分析时首先取出所应用表及索引的统计数据进行分析,其中数据行数是一个重要的参数,因为ORACLE在分析表大小时行数为主要参数,如果进行两个表联合时,ORACLE会通过分析表的大小,决定应用小表进行全表查询,而大表执行联合查询,这种性能明显高于先大表进行全表扫描。索引的统计信息对分析也产生比较大的影响,如ORACLE通过统计可以分析产生多个索引的优先级及索引的实用性来确定最优的索引策略。ORACLE还可以统计列及数据对称信息以产生更精确的分析。如一个表有A字段的索引,其中A共有两种值1和0,共10000条记录,为0的记录有10条,为1的记录有9990条,这时如果没有进行列数据不对称的统计信息,那么ORACLE对A=0及A=1条件查询都会进行索引,但实际应用对A=0的索引性能得到了很大的提高,而A=1的索引反而使性能下降。所以说索引特征值分析信息对应用索引产生重大影响,精确的信息使ORACLE不会使用不应该用的索引。

实际分析

zl_cbqc和zl_yhjbqk都没有建立统计信息,执行如下两个SQL ORACLE将产生不同的执行计划。

1 0select * from dlyx.zl_cbqc b, dlyx.zl_yhjbqk a where a.qc_bh=b.qc_bh

执行计划:

SELECT STATEMENT, GOAL = CHOOSE

NESTED LOOPS

TABLE ACCESS FULL DLYX ZL_YHJBQK

TABLE ACCESS BY INDEX ROWID DLYX ZL_CBQC

INDEX UNIQUE SCAN DLYX 抄表区册主键

2 0select * from dlyx.zl_yhjbqk a,dlyx.zl_cbqc b where a.qc_bh=b.qc_bh

执行计划:

SELECT STATEMENT, GOAL = CHOOSE

NESTED LOOPS

TABLE ACCESS FULL DLYX ZL_CBQC

TABLE ACCESS BY INDEX ROWID DLYX ZL_YHJBQK

INDEX RANGE SCAN DLYX 区册索引

在对两个表进行了统计分析后

3 0select * from dlyx.zl_yhjbqk a,dlyx.zl_cbqc b where a.qc_bh=b.qc_bh

执行计划:

SELECT STATEMENT, GOAL = CHOOSE 159 72853 9689449

HASH JOIN 159 72853 9689449

TABLE ACCESS FULL DLYX ZL_CBQC 1 426 19596

TABLE ACCESS FULL DLYX ZL_YHJBQK 157 72853 6338211

4 0select * from dlyx.zl_cbqc b,dlyx.zl_yhjbqk a where a.qc_bh=b.qc_bh

执行计划:

SELECT STATEMENT, GOAL = CHOOSE 159 72853 9689449

HASH JOIN 159 72853 9689449

TABLE ACCESS FULL DLYX ZL_CBQC 1 426 19596

TABLE ACCESS FULL DLYX ZL_YHJBQK 157 72853 6338211

相关文章


实现数据分类汇总的SQL语句
SQLServer连接中三个最常见错误原因分析
视图在数据库中的应用分析
数据库对象统计分析技术应用
W 2007双面打印技巧:巧设装订线
如何有条件的分步删除数据表中的记录
统计不固定栏目的工资年报的存储过程
操作数的寻址方式之立即寻址方式
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛