请注意,本文编写于 733 天前,最后修改于 733 天前,其中某些信息可能已经过时。
过分析表和索引,更改优化模式,来提高检索速度。
Oracle默认优化模式是CHOOSE,在这种情况下,如果表没有经过分析,经常导致查询使用全表扫描,而不使用索引。这通常导致磁盘I/O太多,而导致查询很慢。如果没有使用执行计划稳定性,则应该把表和索引都分析一下,这样可能直接会使查询速度大幅提升。
分析表命令可以用ANALYZE TABLE 分析索引可以用ANALYZE INDEX命令。
对于少于100万的表,可以考虑分析整个表,对于很大的表,可以按百分比来分析,但是百分比不能过低,否则生成的统计信息可能不准确。
可以通过DBA_TABLES的LAST_ANALYZED列来查看表是否经过分析或分析时间,索引可以通过DBA_INDEXES的LAST_ANALYZED列。
通过SET AUTOTRACE ON 来查看语句的执行计划,通过SET TIMING ON 来查看语句运行时间。
analyze table tablename compute statistics;
分析表和分析索引的语句;
set pagesize 0
spool d:/analyze_tables.sql;
select 'analyze table '||owner||'.'||table_name||' compute statistics;' from dba_tables where owner='system';
spool off
spool spool d:/analyze_indexes.sql;
select 'analyze index '||owner||'.'||index_name||' compute statistics;' from dba_indexes where owner='system';
spool off
@d:/analyze_tables.sql
@d:/analyze_indexes.sql
也可以通过dbms_stats来分析表和索引
通过分析表和索引,查询速度得到极大提高。