首先创建四个临时表t1,t2,t3,t4,和他们相对应的索引 --查看字段的统计信息 --查看索引的统计信息 --这是对于表中字段的统计信息 --这里是对于索引的统计信息 --从这里我们可以看出,只有表t4有索引统计信息. --索引的统计信息 --我们再对以上各表做一次分析 --现在再来查看表和索引的统计信息 --索引的统计信息
复制内容到剪贴板
代码:
create table t1 as select * from user_objects;
create table t2 as select * from user_objects;
create table t3 as select * from user_objects;
create table t4 as select * from user_objects;
create unique index pk_t1_idx on t1(object_id);
create unique index pk_t2_idx on t2(object_id);
create unique index pk_t3_idx on t3(object_id);
create unique index pk_t4_idx on t4(object_id);
查看这个时候各个表对应的数据库统计信息(表,字段,索引)
复制内容到剪贴板
代码:
--查看表的统计信息
select table_name,num_rows,blocks,empty_blocks from user_table where table_names in ('T1','T2','T3','T4');
TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS
T1
T2
T3
T4
select table_name,column_name,num_distinct,low_value,high_value,density from user_tab_columns where table_name in ('T1','T2','T3','T4');
TABLE_NAME COLUMN_NAME NUM_DISTINCT LOW_VALUE HIGH_VALUE DENSITY
T1 OBJECT_NAME
T1 SUBOBJECT_NAME
T1 OBJECT_ID
T1 DATA_OBJECT_ID
T1 OBJECT_TYPE
T1 CREATED
T1 LAST_DDL_TIME
T1 TIMESTAMP
T1 STATUS
T1 TEMPORARY
T1 GENERATED
T1 SECONDARY
T2 OBJECT_NAME
T2 SUBOBJECT_NAME
T2 OBJECT_ID
T2 DATA_OBJECT_ID
T2 OBJECT_TYPE
T2 CREATED
T2 LAST_DDL_TIME
T2 TIMESTAMP
T2 STATUS
T2 TEMPORARY
T2 GENERATED
T2 SECONDARY
T3 OBJECT_NAME
T3 SUBOBJECT_NAME
T3 OBJECT_ID
T3 DATA_OBJECT_ID
T3 OBJECT_TYPE
T3 CREATED
T3 LAST_DDL_TIME
T3 TIMESTAMP
T3 STATUS
T3 TEMPORARY
T3 GENERATED
T3 SECONDARY
T4 OBJECT_NAME
T4 SUBOBJECT_NAME
T4 OBJECT_ID
T4 DATA_OBJECT_ID
T4 OBJECT_TYPE
T4 CREATED
T4 LAST_DDL_TIME
T4 TIMESTAMP
T4 STATUS
T4 TEMPORARY
T4 GENERATED
T4 SECONDARY
select table_name,index_name,blevel,leaf_blocks,distinct_keys,
avg_leaf_blocks_per_key avg_leaf_blocks,avg_data_blocks_per_key avg_data_blocks,clustering_factor,num_rows
from user_indexes where table_name in ('T1','T2','T3','T4');
TABLE_NAME INDEX_NAME BLEVEL LEAF_BLOCKS DISTINCT_KEYS AVG_LEAF_BLOCKS AVG_DATA_BLOCKS CLUSTERING_FACTOR NUM_ROWS
T1 PK_T1_IDX
T2 PK_T2_IDX
T3 PK_T3_IDX
T4 PK_T4_IDX
现在我们分别对这个表做不同形式的analyze table处理
复制内容到剪贴板
代码:
analyze table t1 compute statistics for table;
analyze table t2 compute statistics for all columns;
analyze table t3 compute statistics for all indexed columns;
analyze table t4 compute statistics;
我们再回头看看这是的oracle数据库对于各种统计信息
复制内容到剪贴板
代码:
--这是对于表的统计信息
select table_name,num_rows,blocks,empty_blocks from user_tables where table_name in ('T1','T2','T3','T4');
TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS
T1 3930 55 1
T2
T3
T4 3933 55 1
--我们可以据此得出结论,只有我们在analyze table命令中指定了for table或者不指定任何参数的时候,oracle数据库才会给我们统计基于表的统计信息
select table_name,column_name,num_distinct,low_value,high_value,density from user_tab_columns where table_name in ('T1','T2','T3','T4');
TABLE_NAME COLUMN_NAME NUM_DISTINCT LOW_VALUE HIGH_VALUE DENSITY
T1 OBJECT_NAME
T1 SUBOBJECT_NAME
T1 OBJECT_ID
T1 DATA_OBJECT_ID
T1 OBJECT_TYPE
T1 CREATED
T1 LAST_DDL_TIME
T1 TIMESTAMP
T1 STATUS
T1 TEMPORARY
T1 GENERATED
T1 SECONDARY
T2 OBJECT_NAME 3823 41423030 D3F1BBB736D4C2B7DDCFFABBA7C7E5B5A5 .000270447891062615
T2 SUBOBJECT_NAME 77 503031 52455354 .012987012987013
T2 OBJECT_ID 3930 C304062D C30F4619 .000254452926208651
T2 DATA_OBJECT_ID 3662 C304062D C30F4619 .000273074822501365
T2 OBJECT_TYPE 15 4441544142415345204C494E4B 56494557 .000127194098193844
T2 CREATED 3684 7867081E111F33 7868071211152F .000547559423988464
T2 LAST_DDL_TIME 3574 7867081E11251B 7868071211152F .000565522924083892
T2 TIMESTAMP 3649 323030332D30382D33303A31363A33303A3530 323030342D30372D31383A31363A32303A3436 .000559822349362313
T2 STATUS 2 494E56414C4944 56414C4944 .000127194098193844
T2 TEMPORARY 2 4E 59 .000127194098193844
T2 GENERATED 2 4E 59 .000127194098193844
T2 SECONDARY 2 4E 59 .000127194098193844
T3 OBJECT_NAME
T3 SUBOBJECT_NAME
T3 OBJECT_ID 3931 C304062D C30F461A .000254388196387688
T3 DATA_OBJECT_ID
T3 OBJECT_TYPE
T3 CREATED
T3 LAST_DDL_TIME
T3 TIMESTAMP
T3 STATUS
T3 TEMPORARY
T3 GENERATED
T3 SECONDARY
T4 OBJECT_NAME 3825 41423030 D3F1BBB736D4C2B7DDCFFABBA7C7E5B5A5 .000261437908496732
T4 SUBOBJECT_NAME 77 503031 52455354 .012987012987013
T4 OBJECT_ID 3932 C304062D C30F461B .000254323499491353
T4 DATA_OBJECT_ID 3664 C304062D C30F461B .00027292576419214
T4 OBJECT_TYPE 15 4441544142415345204C494E4B 56494557 .0666666666666667
T4 CREATED 3685 7867081E111F33 78680712111530 .000271370420624152
T4 LAST_DDL_TIME 3575 7867081E11251B 78680712111530 .00027972027972028
T4 TIMESTAMP 3650 323030332D30382D33303A31363A33303A3530 323030342D30372D31383A31363A32303A3437 .000273972602739726
T4 STATUS 2 494E56414C4944 56414C4944 .5
T4 TEMPORARY 2 4E 59 .5
T4 GENERATED 2 4E 59 .5
T4 SECONDARY 2 4E 59 .5
/*
在这个结果中我们可以看到,oracle数据库给t2,t4的所有字段都做了统计信息.
对表t3的object_id(索引字段)做了统计信息.
由此得出结论,
在指定for all columns 和不指定任何参数的时候oracle会给所有字段做统计信息,在指定for indexed columns时,oracle只给[b]有索引的字段进行字段信息统计[/b],如果我们别有必要给所有字段统计信息时,这个属性就很有用了.
*/
select table_name,index_name,blevel,leaf_blocks,distinct_keys,
avg_leaf_blocks_per_key avg_leaf_blocks,avg_data_blocks_per_key avg_data_blocks,clustering_factor,num_rows
from user_indexes where table_name in ('T1','T2','T3','T4');
TABLE_NAME INDEX_NAME BLEVEL LEAF_BLOCKS DISTINCT_KEYS AVG_LEAF_BLOCKS AVG_DATA_BLOCKS CLUSTERING_FACTOR NUM_ROWS
T1 PK_T1_IDX
T2 PK_T2_IDX
T3 PK_T3_IDX
T4 PK_T4_IDX 1 9 3932 1 1 2143 3932
--再综合前面的我们就会发现,如果在运行analyze table是我们不指定参数,oracle将收集对于特定表的所有统计信息(表,索引,表字段的统计信息)
补充,truncate命令不修改以上统计信息
复制内容到剪贴板
代码:
truncate table t1;
truncate table t2;
truncate table t3;
truncate table t4;
--我们在查看表和索引的统计信息
select table_name,num_rows,blocks,empty_blocks from user_tables where table_name in ('T1','T2','T3','T4');
TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS
T1 3930 55 1
T2
T3
T4 3933 55 1
select table_name,index_name,blevel,leaf_blocks,distinct_keys,
avg_leaf_blocks_per_key avg_leaf_blocks,avg_data_blocks_per_key avg_data_blocks,clustering_factor,num_rows
from user_indexes where table_name in ('T1','T2','T3','T4');
TABLE_NAME INDEX_NAME BLEVEL LEAF_BLOCKS DISTINCT_KEYS AVG_LEAF_BLOCKS AVG_DATA_BLOCKS CLUSTERING_FACTOR NUM_ROWS
T1 PK_T1_IDX
T2 PK_T2_IDX
T3 PK_T3_IDX
T4 PK_T4_IDX 1 9 3932 1 1 2143 3932
analyze table t1 compute statistics for table;
analyze table t2 compute statistics for all columns;
analyze table t3 compute statistics for all indexed columns;
analyze table t4 compute statistics;
select table_name,num_rows,blocks,empty_blocks,initial_extent,'8192' block_size from user_tables where table_name in ('T1','T2','T3','T4');
TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS INITIAL_EXTENT BLOCK_SIZE
T1 0 0 8 65536 8192
T2 65536 8192
T3 65536 8192
T4 0 0 8 65536 8192
select table_name,index_name,blevel,leaf_blocks,distinct_keys,
avg_leaf_blocks_per_key avg_leaf_blocks,avg_data_blocks_per_key avg_data_blocks,clustering_factor,num_rows
from user_indexes where table_name in ('T1','T2','T3','T4');
TABLE_NAME INDEX_NAME BLEVEL LEAF_BLOCKS DISTINCT_KEYS AVG_LEAF_BLOCKS AVG_DATA_BLOCKS CLUSTERING_FACTOR NUM_ROWS
T1 PK_T1_IDX
T2 PK_T2_IDX
T3 PK_T3_IDX
T4 PK_T4_IDX 0 0 0 0 0 0 0
--由此得出结论,truncate命令不会修改数据的统计信息,
--也就是如果我们想让CBO利用合理利用数据的统计信息的时候,需要我们及时的使用analyze命令或者dbms_stats重新统计数据的统计信息
发表评论
-
Oracle ITL(事务槽)
2013-07-10 10:14 2375ITL描述: ITL(Interested Transac ... -
【转】Oracle TM锁 TX锁
2013-05-12 23:42 1414转自RuleV5:http://blog.csdn.net/ ... -
【转】Oracle: sqlnet.ora、listener.ora、tnsnames.ora的配置
2013-05-07 22:29 859转自 http://blog.csdn.net/wenlel ... -
v$parameter, v$parameter2, v$system_parameter, v$system_parameter2, v$spparamete
2013-05-07 15:05 1295转自:http://blog.csdn.net/huang_ ... -
SQL 连接(左连接,右连接,全连接,内连接,交叉连接,自连接) (转)
2013-02-02 23:10 1009最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连 ... -
Oracle 回收站 (转)
2013-02-01 17:19 770我们都比较熟悉windows中的回收站,文件删除后放到回收 ... -
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
2011-03-13 14:02 722近日在配置Oracle 10G的 ... -
ORA-28000: the account is locked
2011-03-12 19:36 1780迁移项目,一切弄完后启动服务器,Hibernate报错:OR ... -
ORA-01578: ORACLE 数据块损坏 一种解决方案 (转)
2011-03-11 15:32 31435os: winxp db: 10g r2 错误提 ... -
oracle的备份与恢复 (转)
2011-03-11 14:28 1158oracle中的不使用rman的备 ... -
oracle 存储结构
2011-03-10 13:33 1815总体来说oracle的逻辑结构和物理结构是由块、区、段 ... -
pctused, pctfree, pctincrease , 行迁移 & 行链接 (转)
2011-03-09 19:48 1423关于pctincrease与空间 ... -
表空间管理 用户管理 日志文件管理
2011-03-08 14:09 7741、表空间管理和用户管理 --创建数据表 ... -
oracle initrans maxtrans
2011-03-07 10:35 3955initrans用于对数据块的行级并行操作的控制。首先介绍事 ... -
oracle 高水位线(转)
2011-03-04 14:30 2500高水位线实验: -- 创建test3表 SQL> cre ... -
Oracle SQL 优化 (转)
2011-03-03 15:16 676Oracle SQL的优化规则: 尽量少用IN操作符,基本上所 ... -
EXECUTE IMMEDIATE用法小解(转)
2011-03-03 14:33 638EXECUTE IMMEDIATE 代替了以前Oracle8i ... -
Oracle distinct的用法(转)
2011-03-03 09:37 805distinct这个关键字来过滤掉多余的重复记录只 ... -
oracle float(b)(转)
2011-03-02 14:48 1147今天有人问我,他把字段类型设计成float(2)后,插入数 ... -
oracle10g PGA 管理(转)
2011-02-24 09:59 1582一、概述 SGA,PGA,UGA都是Oracle管理的 ...
相关推荐
有時候Oracle效能變慢, 做一下分析 讓他認得index.key....,之後查詢、執行操作會提高效率
Oracle Database 10g 提供了一个显著改进的工具:自动工作负载信息库 (AWR:Automatic Workload Repository)。Oracle 建议用户用这个取代 Statspack。AWR 实质上是一个 Oracle 的内置工具,它采集与性能相关的统计...
SELECT 'ANALYZE TABLE ZFMI.'||TABLE_NAME||' COMPUTE STATISTICS ;' FROM USER_TABLES; ----------------------------------------------------------------------------------------- 表索引分析语句 ...
ORACLE的优化器共有3种 ... 在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器
Oracle Oracle语句优化53个规则详解(1) Oraclesql 性能优化调整 1.选用适合的ORACLE优化器 ORACLE的优化器共有3种: a.RULE(基于规则) ...如果table已经被analyze过,优化器模式将自动成为CBO,反之,数据
在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器. 2. 访问Table的方式 ORACLE 采用两种...
如果table已经被analyze过, 优化器模式将自动成为CBO , 否则使用RULE形式的优化器. 共享池(shared buffer pool) 第一次解析SQL之后, ORACLE将SQL语句存放在共享池中. ORACLE只对简单的表提供高速缓冲(cache ...
1. 选用适合的ORACLE优化器 ... 在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器.
在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。 2. 访问Table的方式ORACLE 采用两种...
oracle性能优化 ORACLE SQL性能优化系列 (一) 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和... 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器.
在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器. 2. 访问Table的方式 ORACLE 采用两种访问表...
analyze 使用analyze命令分析数据库中任意的表、索引和簇 audit any 为任意的数据库对象设置审计选项 audit system 答应系统操作审计 backup any table 备份任意表的权限 become user 切换用户状态的...
如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器。 在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用...
Toad and Oracle Enterprise Manager 29 Quick Search Bar 30 Additional Resources 31 Working with other Quest Products 32 Knowledge Xpert 32 Using SQL Optimizer with Toad 32 Benchmark Factory 33 Quest ...
3、以删除的叶节点数量:指得是数据行的delete操作从逻辑上删除的索引节点 的数量,要记住oracle在删除数据行后,将 “ 死 “ 节点保留在索引中,这样做可以加快sql删除操作的速度,因此oracle删除数据行后可以不必...
在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。 2. 访问Table的方式Oracle采用两种访问...
Oracle语句优化30个规则详解: ... 在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器.....
在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器. 2. 访问Table的方式 ORACLE 采用两种...
您可能感兴趣的文章:shell脚本操作oracle删除表空间、创建表空间、删除用户杀掉oracle在线用户脚本分享[Oracle] 如何使用触发器实现IP限制用户登录在命令行下进行Oracle用户解锁的语句深入探讨:Oracle中如