首先创建四个临时表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 2424ITL描述: ITL(Interested Transac ... -
【转】Oracle TM锁 TX锁
2013-05-12 23:42 1445转自RuleV5:http://blog.csdn.net/ ... -
【转】Oracle: sqlnet.ora、listener.ora、tnsnames.ora的配置
2013-05-07 22:29 902转自 http://blog.csdn.net/wenlel ... -
v$parameter, v$parameter2, v$system_parameter, v$system_parameter2, v$spparamete
2013-05-07 15:05 1322转自:http://blog.csdn.net/huang_ ... -
SQL 连接(左连接,右连接,全连接,内连接,交叉连接,自连接) (转)
2013-02-02 23:10 1033最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连 ... -
Oracle 回收站 (转)
2013-02-01 17:19 816我们都比较熟悉windows中的回收站,文件删除后放到回收 ... -
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
2011-03-13 14:02 747近日在配置Oracle 10G的 ... -
ORA-28000: the account is locked
2011-03-12 19:36 1805迁移项目,一切弄完后启动服务器,Hibernate报错:OR ... -
ORA-01578: ORACLE 数据块损坏 一种解决方案 (转)
2011-03-11 15:32 31472os: winxp db: 10g r2 错误提 ... -
oracle的备份与恢复 (转)
2011-03-11 14:28 1191oracle中的不使用rman的备 ... -
oracle 存储结构
2011-03-10 13:33 1838总体来说oracle的逻辑结构和物理结构是由块、区、段 ... -
pctused, pctfree, pctincrease , 行迁移 & 行链接 (转)
2011-03-09 19:48 1457关于pctincrease与空间 ... -
表空间管理 用户管理 日志文件管理
2011-03-08 14:09 8001、表空间管理和用户管理 --创建数据表 ... -
oracle initrans maxtrans
2011-03-07 10:35 4015initrans用于对数据块的行级并行操作的控制。首先介绍事 ... -
oracle 高水位线(转)
2011-03-04 14:30 2544高水位线实验: -- 创建test3表 SQL> cre ... -
Oracle SQL 优化 (转)
2011-03-03 15:16 705Oracle SQL的优化规则: 尽量少用IN操作符,基本上所 ... -
EXECUTE IMMEDIATE用法小解(转)
2011-03-03 14:33 666EXECUTE IMMEDIATE 代替了以前Oracle8i ... -
Oracle distinct的用法(转)
2011-03-03 09:37 833distinct这个关键字来过滤掉多余的重复记录只 ... -
oracle float(b)(转)
2011-03-02 14:48 1174今天有人问我,他把字段类型设计成float(2)后,插入数 ... -
oracle10g PGA 管理(转)
2011-02-24 09:59 1612一、概述 SGA,PGA,UGA都是Oracle管理的 ...
相关推荐
"Analyze_Oracle_Table.rar"这个压缩包文件的主题聚焦于Oracle表的分析,目的是提升查询和执行操作的效率。Oracle的性能可能会因为各种因素而下降,例如索引未被有效利用、数据分布不均匀或者统计信息过时等。因此,...
analyze 语句有多种形式,例如 analyze table tablename compute statistics,可以收集表的统计信息;analyze table tablename delete statistics,可以删除表的统计信息。 在 Oracle 数据库中,analyze 语句是非常...
在Oracle中,可以通过`ANALYZE TABLE`命令来实现这一功能。下面的SQL脚本`analyTab.sql`展示了如何生成针对用户所有表的分析语句。 ```sql SELECT 'ANALYZE TABLE ZFMI.'||TABLE_NAME||' COMPUTE STATISTICS ;' ...
Oracle数据库中的索引是提升查询性能的关键工具,但随着时间推移和数据操作,索引可能会变得效率低下,需要重建以优化其性能。本文主要总结了重建Oracle索引的相关知识点。 一、重建索引的前提条件 当表上的数据...
Oracle Database 10g 提供了一个显著改进的工具:自动工作负载信息库 (AWR:Automatic Workload Repository)。Oracle 建议用户用这个取代 Statspack。AWR 实质上是一个 Oracle 的内置工具,它采集与性能相关的统计...
9. 分析表:`ANALYZE TABLE table_name COMPUTE STATISTICS;` 以上只是Oracle DBA日常工作中的一部分,实际工作还会涉及更多复杂的任务,如数据库设计、性能调优、高可用性架构等。通过熟练掌握Oracle相关知识和SQL...
ANALYZE TABLE table_name COMPUTE STATISTICS FOR ALL INDEXES; ANALYZE TABLE table_name DELETE STATISTICS; ``` 这些命令用于手动收集或删除特定表的统计信息。 2. **使用DBMS_STATS包:** Oracle建议使用`...
因此,定期运行ANALYZE命令更新统计信息至关重要。 优化模式有四种:Rule、Choose、First Rows和All Rows。默认是Choose模式,它会根据是否有统计信息和表的大小来决定使用RBO还是CBO。First Rows模式关注快速返回...
1. **统计信息收集**:通过`ANALYZE TABLE ... COMPUTE STATISTICS`或`ANALYZE TABLE ... ESTIMATE STATISTICS`命令来收集表和索引的统计信息。 2. **统计信息的作用**:这些统计信息包括表中的行数、索引中的唯一...
- `ANALYZE TABLE table_name COMPUTE STATISTICS FOR TABLE;`:只对表本身进行分析,而不包括索引。 **应用场景:** - 在进行定期维护时,或者当表的数据发生重大变化时(如大规模插入或删除操作),应运行这些...
### Oracle9i优化器深入解析 #### 一、优化器目标的选择 在Oracle9i数据库系统中,优化器的目标选择至关重要,它直接影响着查询的执行效率。优化器目标主要分为两类:最佳吞吐量(All_Rows)和最快响应速度(First...
1. **分析表**:执行`ANALYZE TABLE`命令可以帮助Oracle优化器更好地理解数据分布情况。 ```sql ANALYZE TABLE table_name COMPUTE STATISTICS; ``` 2. **调整分区策略**:对于分区表,合理调整分区策略有助于...
- `ANALYZE TABLE table_name VALIDATE STRUCTURE CASCADE;` - `ANALYZE TABLE table_name LIST CHAINED ROWS;` - **限制**:`ANALYZE`命令不适用于大型分区表。 ##### 2. DBMS_STATS 包 - **功能**:提供了更...
job_action => 'BEGIN EXECUTE IMMEDIATE ''ANALYZE TABLE my_table COMPUTE STATISTICS''; END;', start_date => SYSDATE, repeat_interval => 'FREQ=HOURLY;INTERVAL=1', enabled => TRUE); END; / ``` 这...
- **Analyze Table**:这是一种传统的表分析方式,可以通过命令 `analyze table tablename compute statistics` 来收集表级、索引级和列级的统计信息。这些统计信息会被存储在特定的视图中,方便后续查询和维护。 -...
* 首先对表进行分析:ANALYZE TABLE <tablename> ESTIMATE/COMPUTE STATISTICS; * 查看相关信息:SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name = ; 其中,BLOCKS 列代表该表中曾经...
- 定期执行`ANALYZE TABLE`更新统计信息,帮助Oracle优化器做出更准确的执行计划选择。 10. **使用EXPLAIN PLAN**: - 使用`EXPLAIN PLAN`工具分析SQL语句的执行计划,理解Oracle如何使用索引和执行查询,从而...
Oracle还包含许多实用的数据库管理命令,如DROPTABLE用于删除表,ALTER TABLE用于修改表结构,GRANT和REVOKE用于权限管理,以及ANALYZE TABLE用于收集统计信息以优化查询性能。 六、更深入的内容 除了上述基础知识...
ANALYZE TABLE AC9G_TEMP COMPUTE STATISTICS; ``` 这条命令用于计算表`AC9G_TEMP`的统计信息,包括行数、块数等,这对于后续分析高水位非常重要。 2. **查询当前表的总块数和空闲块数**: ```sql SELECT ...