`
trophy
  • 浏览: 178622 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

oracle analyze table(转)

阅读更多

首先创建四个临时表t1,t2,t3,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

--从这里我们可以看出,只有表t4有索引统计信息.
--再综合前面的我们就会发现,如果在运行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重新统计数据的统计信息

分享到:
评论

相关推荐

    Analyze_Oracle_Table.rar_Table_analyze orac_analyze orac_oracle

    "Analyze_Oracle_Table.rar"这个压缩包文件的主题聚焦于Oracle表的分析,目的是提升查询和执行操作的效率。Oracle的性能可能会因为各种因素而下降,例如索引未被有效利用、数据分布不均匀或者统计信息过时等。因此,...

    Oracle表删除大量数据(千万)后查询变慢问题(原因分析)

    analyze 语句有多种形式,例如 analyze table tablename compute statistics,可以收集表的统计信息;analyze table tablename delete statistics,可以删除表的统计信息。 在 Oracle 数据库中,analyze 语句是非常...

    自动生成oracle数据库表分析语句

    在Oracle中,可以通过`ANALYZE TABLE`命令来实现这一功能。下面的SQL脚本`analyTab.sql`展示了如何生成针对用户所有表的分析语句。 ```sql SELECT 'ANALYZE TABLE ZFMI.'||TABLE_NAME||' COMPUTE STATISTICS ;' ...

    ORACLE重建索引总结

    Oracle数据库中的索引是提升查询性能的关键工具,但随着时间推移和数据操作,索引可能会变得效率低下,需要重建以优化其性能。本文主要总结了重建Oracle索引的相关知识点。 一、重建索引的前提条件 当表上的数据...

    Oracle_AWR_介绍

    Oracle Database 10g 提供了一个显著改进的工具:自动工作负载信息库 (AWR:Automatic Workload Repository)。Oracle 建议用户用这个取代 Statspack。AWR 实质上是一个 Oracle 的内置工具,它采集与性能相关的统计...

    oracle dba日常管理

    9. 分析表:`ANALYZE TABLE table_name COMPUTE STATISTICS;` 以上只是Oracle DBA日常工作中的一部分,实际工作还会涉及更多复杂的任务,如数据库设计、性能调优、高可用性架构等。通过熟练掌握Oracle相关知识和SQL...

    Oracle Statistic 统计信息

    ANALYZE TABLE table_name COMPUTE STATISTICS FOR ALL INDEXES; ANALYZE TABLE table_name DELETE STATISTICS; ``` 这些命令用于手动收集或删除特定表的统计信息。 2. **使用DBMS_STATS包:** Oracle建议使用`...

    oracle_hint

    因此,定期运行ANALYZE命令更新统计信息至关重要。 优化模式有四种:Rule、Choose、First Rows和All Rows。默认是Choose模式,它会根据是否有统计信息和表的大小来决定使用RBO还是CBO。First Rows模式关注快速返回...

    Oracle数据库索引的维护

    1. **统计信息收集**:通过`ANALYZE TABLE ... COMPUTE STATISTICS`或`ANALYZE TABLE ... ESTIMATE STATISTICS`命令来收集表和索引的统计信息。 2. **统计信息的作用**:这些统计信息包括表中的行数、索引中的唯一...

    Oracle性能监控SQL语句

    - `ANALYZE TABLE table_name COMPUTE STATISTICS FOR TABLE;`:只对表本身进行分析,而不包括索引。 **应用场景:** - 在进行定期维护时,或者当表的数据发生重大变化时(如大规模插入或删除操作),应运行这些...

    oracle9i优化器介绍

    ### Oracle9i优化器深入解析 #### 一、优化器目标的选择 在Oracle9i数据库系统中,优化器的目标选择至关重要,它直接影响着查询的执行效率。优化器目标主要分为两类:最佳吞吐量(All_Rows)和最快响应速度(First...

    oracle表空间变动注意事项

    1. **分析表**:执行`ANALYZE TABLE`命令可以帮助Oracle优化器更好地理解数据分布情况。 ```sql ANALYZE TABLE table_name COMPUTE STATISTICS; ``` 2. **调整分区策略**:对于分区表,合理调整分区策略有助于...

    oracle-认证之管理统计信息

    - `ANALYZE TABLE table_name VALIDATE STRUCTURE CASCADE;` - `ANALYZE TABLE table_name LIST CHAINED ROWS;` - **限制**:`ANALYZE`命令不适用于大型分区表。 ##### 2. DBMS_STATS 包 - **功能**:提供了更...

    oraclejob例子

    job_action => 'BEGIN EXECUTE IMMEDIATE ''ANALYZE TABLE my_table COMPUTE STATISTICS''; END;', start_date => SYSDATE, repeat_interval => 'FREQ=HOURLY;INTERVAL=1', enabled => TRUE); END; / ``` 这...

    oracle公司内部培训手册

    - **Analyze Table**:这是一种传统的表分析方式,可以通过命令 `analyze table tablename compute statistics` 来收集表级、索引级和列级的统计信息。这些统计信息会被存储在特定的视图中,方便后续查询和维护。 -...

    oracle高水位线

    * 首先对表进行分析:ANALYZE TABLE <tablename> ESTIMATE/COMPUTE STATISTICS; * 查看相关信息:SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name = ; 其中,BLOCKS 列代表该表中曾经...

    数据库面试题4 oracle笔试 oracle例题

    - 定期执行`ANALYZE TABLE`更新统计信息,帮助Oracle优化器做出更准确的执行计划选择。 10. **使用EXPLAIN PLAN**: - 使用`EXPLAIN PLAN`工具分析SQL语句的执行计划,理解Oracle如何使用索引和执行查询,从而...

    oracle语法大全

    Oracle还包含许多实用的数据库管理命令,如DROPTABLE用于删除表,ALTER TABLE用于修改表结构,GRANT和REVOKE用于权限管理,以及ANALYZE TABLE用于收集统计信息以优化查询性能。 六、更深入的内容 除了上述基础知识...

    oracle高水位.txt

    ANALYZE TABLE AC9G_TEMP COMPUTE STATISTICS; ``` 这条命令用于计算表`AC9G_TEMP`的统计信息,包括行数、块数等,这对于后续分析高水位非常重要。 2. **查询当前表的总块数和空闲块数**: ```sql SELECT ...

Global site tag (gtag.js) - Google Analytics