转自:http://www.cnblogs.com/lanzi/archive/2010/12/31/1923270.html
1.分析表与索引(analyze 不会重建索引)
等同于 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、其他的统计方法
--创建统计信息历史保留表
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:收集对象的的统计信息
相关推荐
#### 四、索引重建的方法与步骤 1. **重建索引的方式**:在Oracle中,重建索引通常不建议通过先删除再重新创建的方式来完成,因为这种方式不仅效率低下,而且在重建期间无法使用索引。相比之下,使用`REBUILD`命令...
在Oracle数据库中,CLOB(Character Large Object)...通过合理的索引重建和表空间管理,可以确保数据库高效运行,并减少不必要的维护成本。在实践中,应结合实际情况灵活运用各种SQL语句和存储过程,以达到最佳效果。
本文主要总结了重建Oracle索引的相关知识点。 一、重建索引的前提条件 当表上的数据频繁进行`UPDATE`和`DELETE`操作,或者执行了`ALTER TABLE ... MOVE`操作导致ROWID改变时,可能需要考虑重建索引。这些操作可能...
导致索引失效: 1、表上频繁发生update,delete操作; 2、表上发生了alter table ..move操作(move操作导致了rowid变化)。
Oracle 在线创建索引和重组索引 Oracle 在线创建索引和重组索引是数据库管理员经常需要处理的问题。在线创建索引可以提高查询性能,而重组索引可以减少索引的碎片化和空间浪费。下面我们将详细介绍在线创建索引和...
3. 使用EXPLAIN PLAN分析查询:Oracle的EXPLAIN PLAN功能可以帮助分析查询计划,了解是否使用了索引以及其效果。 四、索引的管理 1. 创建索引:使用CREATE INDEX语句创建新索引。 2. 监控性能:通过V$视图如V$INDEX...
Oracle数据库中的索引是优化查询性能的关键工具,它...因此,当遇到常见的索引问题时,如索引未被使用、索引碎片化、索引过多或过少等,都需要深入分析并采取相应的解决方案,如重建索引、优化查询语句或调整索引策略。
2. **索引的重建与优化**: - 随着数据的增删改查操作,索引可能会变得不那么有效,此时可以通过重建索引来恢复其性能。重建索引可以通过`ALTER INDEX ... REBUILD`命令完成。 3. **索引碎片整理**: - 当数据行...
- **定期重建索引**: 随着数据量的增长,索引可能变得不那么高效,定期重建可以优化其结构。 - **监控索引使用情况**: 使用Oracle的工具如AWR报告来监控索引的使用情况,识别未被充分利用的索引并进行调整。 - **...
通过对Oracle索引重构的不同方式进行了解和分析,我们可以根据实际的需求和系统环境选择最适合的方法。无论是采用简单的`DROP AND RECREATE`还是更复杂的`REBUILD ONLINE`,目的都是为了提高数据库的查询性能,确保...
在Oracle中,SYSTEM表包含了大量的系统信息,但将非SYSTEM用户的对象存储在这里并不理想,因为这可能导致数据库管理和维护的复杂性增加,甚至在SYSTEM表损坏时需要重建整个数据库。要检查SYSTEM表中是否存在其他用户...
2. 索引重建:当表结构改变或索引碎片过多时,可以重建索引来优化性能。 3. 索引监控:通过性能监控工具检查索引使用情况,判断是否需要调整或删除。 4. 索引优化:考虑使用索引合并、覆盖索引、分区策略等技术来...
3. **索引重建与合并** 当索引碎片严重时,可以考虑重建或合并索引。 ### 六、结论 Oracle索引是提升数据库性能的关键工具,正确设计和管理索引能显著改善查询速度,但也需要注意其潜在的负面影响。理解索引的...
索引的维护包括监控索引的使用情况、分析索引碎片、重建索引等。Oracle提供了DBMS_INDEX包和DBMS_STATS包来帮助管理员进行这些操作。 六、索引的选择性 选择性高的索引意味着更多的数据行具有唯一的键值,这样的...
1. **在线重建**:使用`ONLINE`选项可以在不影响应用程序的情况下进行索引重建,这对于生产环境中的数据库非常重要。 2. **表空间选择**:通过指定`TABLESPACE name`,可以将重建后的索引放在不同的表空间中,这有助...
### Oracle索引失效的原因及解决方法 在Oracle数据库中,索引是提高查询效率的关键工具之一。然而,在实际的应用过程中,由于多种原因可能会导致索引失效,从而影响系统的性能。本文将详细介绍Oracle索引失效的一些...
### 如何重建索引 #### 一、何时需要考虑重建索引 索引是数据库管理系统为了提高查询效率而建立的数据结构。随着数据的增删改查操作,索引...选择合适的时机和方法进行索引重建,能够显著提升数据库系统的整体性能。
2. 分析索引:创建索引后,使用DBMS_INDEXAnalyzer进行分析,以优化索引性能。 三、全文检索语法 1. 使用CONTAINS子句:在SQL查询中,可以使用CONTAINS操作符进行全文搜索,它支持精确匹配、模糊匹配、近义词搜索等...
### Oracle索引使用样例详解 #### 一、索引并行创建 在Oracle数据库中,并行创建索引可以显著提高创建索引的速度,尤其是在处理大量数据时。下面的SQL语句展示了如何并行创建一个索引: ```sql CREATE INDEX IDX_GD...