作用:
为了使基于CBO的执行计划更加准确
Oracle数据库中的优化器又叫查询优化器(Query Optimizer)。它是SQL分析和执行的优化工具,它负责生成、制定SQL的执行计划。Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO)
RBO: Rule-Based Optimization 基于规则的优化器
CBO: Cost-Based Optimization 基于代价的优化器
RBO自ORACLE 6以来被采用,一直沿用至ORACLE 9i. ORACLE 10g开始,ORACLE已经彻底丢弃了RBO
统计分析表信息之前必须保证表统计分析没有被锁住
1、查询用户下统计分析锁住的表
select OWNER, TABLE_NAME, LAST_ANALYZED, STATTYPE_LOCKED, STALE_STATS
from DBA_TAB_STATISTICS
where STATTYPE_LOCKED is not null and owner = upper('GZ_GYRX_0726') and table_name not like '%$%';
2、解除锁状态
命令窗口:
exec dbms_stats.unlock_table_stats('GZ_GYRX_0726','T_S_DC_CURY');
PL/SQL:
begin
dbms_stats.unlock_table_stats('GZ_GYRX_0726','T_S_DC_CURY');
end;
3、重新统计分析表信息
begin
dbms_stats.gather_table_stats('GZ_GYRX_0726','A000087_ACTVAL');
end;
2和3可以同时执行:
begin
dbms_stats.unlock_table_stats('GZ_GYRX_0726','T_S_DC_CURY');
dbms_stats.gather_table_stats('GZ_GYRX_0726','A000087_ACTVAL');
end;
可以解锁、重新统计分析某一用户所有的对象(包括表、索引、簇)信息:
begin
dbms_stats.unlock_schema_stats('GZ_GYRX_0726');
dbms_stats.gather_schema_stats('GZ_GYRX_0726');
end;