`
langgufu
  • 浏览: 2309008 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle表与索引的分析及索引重建(转载)

阅读更多
2010年12月31日 

 

1.分析表与索引(analyze 不会重建索引)

 
analyze table tablename compute statistics 
等同于 analyze table tablename compute statistics for table for all indexes for all columns

for table 的统计信息存在于视图:user_tables 、all_tables、dba_tables

for all indexes 的统计信息存在于视图: user_indexes 、all_indexes、dba_indexes

for all columns 的统计信息存在于视图:user_tab_columns、all_tab_columns、dba_tab_columns

注:分析表与索引见 AnalyzeAllTable存储过程

2、一般来讲可以采用以下三种方式来手工分析索引
analyze index idx_t validate structure:
analyze index idx_t compute statistics:
analyze index idx_t estimate statistics sample 10 percent

1)analyze index idx_t validate structure:
这段分析语句是用来分析索引的block中是否有坏块儿,那么根据分析我们可以得到索引的结构数据,这些数据会保留到
index_stats中,来判断这个索引是否需要rebuild. 需要注意的是这样的分析是不会收集索引的统计信息的。

2)validate structure有二种模式: online, offline, 一般来讲默认的方式是offline。
当以offline的模式analyze索引时,会对table加一个表级共享锁,对目前table的一些实时DMl操作会产生一定的影响。
而以online模式分析时候,则不会加任何lock,但在index_stats中是看不到任何信息的。

3)analyze index idx_t compute statistics:
用来统计索引的统计信息(全分析),主要为CBO服务。

4)analyze index idx_t estimate statistics sample 10 percent
主要是用来指定比例进行抽样分析,也是为CBO服务. 例中是抽样10%

3.重建索引
alter index index_name rebuild tablespace tablespace_name 
alter index index_name rebuild tablespace tablespace_name 加入表空间名,会将指定的索引移动到指定的表空间当中。

注:
analyze 操作只是统计信息,并将统计信息存放起来供日后分析SQL使用,不进行重建之类的具体实施性操作,因此要重建索引的话
还是要用 alter index index_name rebuild

4、其他的统计方法

1)DBMS_STATS:这个当然是最强大的分析包了
--创建统计信息历史保留表
exec dbms_stats.create_stat_table(ownname => 'scott',stattab => 'stat_table');

--导出整个scheme的统计信息
exec dbms_stats.export_schema_stats(ownname => 'scott',stattab => 'stat_table');

--分析scheme
Exec dbms_stats.gather_schema_stats(ownname => 'test',options => 'GATHER AUTO',
                                       estimate_percent => dbms_stats.auto_sample_size,
                                       method_opt => 'for all indexed columns',
                                       degree => 6 );

--分析表
exec dbms_stats.gather_table_stats(ownname => 'TEST',tabname => 'sm_user',estimate_percent => 10,method_opt=> 'for all indexed columns') ;

--分析索引
exec dbms_stats.gather_index_stats(ownname => 'TEST',indname => 'pk_user_index',estimate_percent => '10',degree => '4') ;

--如果发现执行计划走错,删除表的统计信息
exec dbms_stats.delete_table_stats(ownname => 'TEST',tabname => 'SM_USER') ;

--导入表的历史统计信息
exec dbms_stats.import_table_stats(ownname => 'TEST',tabname => 'SM_USER',stattab => 'stat_table') ;

--如果进行分析后,大部分表的执行计划都走错,需要导回整个scheme的统计信息
exec dbms_stats.import_schema_stats(ownname => 'TEST',stattab => 'SM_USER');

--导入索引的统计信息
exec dbms_stats.import_index_stats(ownname => 'TEST',indname => 'PK_USER_INDEX',stattab => 'stat_table')


analyze和dbms_stats不同的地方:
analyze是同时更新表和索引的统计信息,而dbms_stats会先更新表的统计信息,然后再更新索引的统计信息,
这里就有一个问题,就是当表的统计信息更新后,而索引的统计信息没有被更新,这时候cbo就有可能选择错误的plan

2)DBMS_UTILITY.ANALYZE_SCHEMA:可直接分析SCHEMA中所有对象
   如:EXEC DBMS_UTILITY.ANALYZE_SCHEMA ('LTTFM','COMPUTE');

3)DBMS_DDL.ANALYZE_OBJECT:收集对象的的统计信息

 

分享到:
评论

相关推荐

    浅谈oracle中重建索引

    #### 四、索引重建的方法与步骤 1. **重建索引的方式**:在Oracle中,重建索引通常不建议通过先删除再重新创建的方式来完成,因为这种方式不仅效率低下,而且在重建期间无法使用索引。相比之下,使用`REBUILD`命令...

    关于oracle clob 类型字段重建索引SQL及修复用户表空间索引空间的存储过程

    在Oracle数据库中,CLOB(Character Large Object)...通过合理的索引重建和表空间管理,可以确保数据库高效运行,并减少不必要的维护成本。在实践中,应结合实际情况灵活运用各种SQL语句和存储过程,以达到最佳效果。

    ORACLE重建索引总结

    本文主要总结了重建Oracle索引的相关知识点。 一、重建索引的前提条件 当表上的数据频繁进行`UPDATE`和`DELETE`操作,或者执行了`ALTER TABLE ... MOVE`操作导致ROWID改变时,可能需要考虑重建索引。这些操作可能...

    oracle在线创建索引和重组索引

    Oracle 在线创建索引和重组索引 Oracle 在线创建索引和重组索引是数据库管理员经常需要处理的问题。在线创建索引可以提高查询性能,而重组索引可以减少索引的碎片化和空间浪费。下面我们将详细介绍在线创建索引和...

    ORACLE数据库重建索引

    导致索引失效: 1、表上频繁发生update,delete操作; 2、表上发生了alter table ..move操作(move操作导致了rowid变化)。

    09 oracle的索引 PPT

    3. 使用EXPLAIN PLAN分析查询:Oracle的EXPLAIN PLAN功能可以帮助分析查询计划,了解是否使用了索引以及其效果。 四、索引的管理 1. 创建索引:使用CREATE INDEX语句创建新索引。 2. 监控性能:通过V$视图如V$INDEX...

    oracle索引,常见索引问题

    Oracle数据库中的索引是优化查询性能的关键工具,它...因此,当遇到常见的索引问题时,如索引未被使用、索引碎片化、索引过多或过少等,都需要深入分析并采取相应的解决方案,如重建索引、优化查询语句或调整索引策略。

    Oracle数据库索引的维护

    2. **索引的重建与优化**: - 随着数据的增删改查操作,索引可能会变得不那么有效,此时可以通过重建索引来恢复其性能。重建索引可以通过`ALTER INDEX ... REBUILD`命令完成。 3. **索引碎片整理**: - 当数据行...

    Oracle重构索引

    通过对Oracle索引重构的不同方式进行了解和分析,我们可以根据实际的需求和系统环境选择最适合的方法。无论是采用简单的`DROP AND RECREATE`还是更复杂的`REBUILD ONLINE`,目的都是为了提高数据库的查询性能,确保...

    Oracle 创建索引的基本规则

    - **定期重建索引**: 随着数据量的增长,索引可能变得不那么高效,定期重建可以优化其结构。 - **监控索引使用情况**: 使用Oracle的工具如AWR报告来监控索引的使用情况,识别未被充分利用的索引并进行调整。 - **...

    Oracle数据库中索引的维护

    在Oracle中,SYSTEM表包含了大量的系统信息,但将非SYSTEM用户的对象存储在这里并不理想,因为这可能导致数据库管理和维护的复杂性增加,甚至在SYSTEM表损坏时需要重建整个数据库。要检查SYSTEM表中是否存在其他用户...

    oracle 视图、索引(自用)

    2. 索引重建:当表结构改变或索引碎片过多时,可以重建索引来优化性能。 3. 索引监控:通过性能监控工具检查索引使用情况,判断是否需要调整或删除。 4. 索引优化:考虑使用索引合并、覆盖索引、分区策略等技术来...

    Oracle培训 关于索引等详细信息的讲解

    索引的维护包括监控索引的使用情况、分析索引碎片、重建索引等。Oracle提供了DBMS_INDEX包和DBMS_STATS包来帮助管理员进行这些操作。 六、索引的选择性 选择性高的索引意味着更多的数据行具有唯一的键值,这样的...

    Oracle Index 索引介绍

    3. **索引重建与合并** 当索引碎片严重时,可以考虑重建或合并索引。 ### 六、结论 Oracle索引是提升数据库性能的关键工具,正确设计和管理索引能显著改善查询速度,但也需要注意其潜在的负面影响。理解索引的...

    Oracle解决索引碎片功能.txt

    1. **在线重建**:使用`ONLINE`选项可以在不影响应用程序的情况下进行索引重建,这对于生产环境中的数据库非常重要。 2. **表空间选择**:通过指定`TABLESPACE name`,可以将重建后的索引放在不同的表空间中,这有助...

    oracle索引失效的总结

    ### Oracle索引失效的原因及解决方法 在Oracle数据库中,索引是提高查询效率的关键工具之一。然而,在实际的应用过程中,由于多种原因可能会导致索引失效,从而影响系统的性能。本文将详细介绍Oracle索引失效的一些...

    ORacle 全文索引

    2. 分析索引:创建索引后,使用DBMS_INDEXAnalyzer进行分析,以优化索引性能。 三、全文检索语法 1. 使用CONTAINS子句:在SQL查询中,可以使用CONTAINS操作符进行全文搜索,它支持精确匹配、模糊匹配、近义词搜索等...

    oracle索引使用样例

    ### Oracle索引使用样例详解 #### 一、索引并行创建 在Oracle数据库中,并行创建索引可以显著提高创建索引的速度,尤其是在处理大量数据时。下面的SQL语句展示了如何并行创建一个索引: ```sql CREATE INDEX IDX_GD...

    Oracle DBA实战索引优化

    1. **索引构建**:当创建索引时,Oracle会在索引结构中存储每一条记录的关键字值及对应的ROWID。 2. **查询过程**:当执行查询时,Oracle首先访问索引,根据索引中的关键字值查找相应的ROWID,再根据ROWID获取实际的...

Global site tag (gtag.js) - Google Analytics