以下是我为scott.emp
表所做的步骤。
select * from emp where empno > 7503
select * from table(dbms_xplan.display_cursor);
[..] Note ----- - dynamic statistics used: dynamic sampling (level=2)
exec DBMS_STATS.GATHER_TABLE_STATS ('scott','EMP');
select * from emp where empno > 7503.
select * from table(dbms_xplan.display_cursor);
-- No Dynamic sampling used --
导出表统计信息。
select NUM_ROWS,LAST_ANALYZED,GLOBAL_STATS,USER_STATS from USER_TAB_STATISTICS where table_name ='EMP';
14 28-SEP-16 YES NO
select * from emp where empno > 7503.
select * from table(dbms_xplan.display_cursor);
Note ----- - dynamic statistics used: dynamic sampling (level=2)**
为什么即使表有统计数据,也会使用动态采样?导入统计数据后是否需要触发任何内容? 为什么在第一次收集统计数据后,优化程序没有使用动态采样?(步骤5)?
答案 0 :(得分:0)
有原因。在步骤8中,我只导入表统计信息。如果我们导入db stats,system,dictionary stats,那么Optimizer将不会进行动态采样。
优化器规则:如果优化器没有/足够的统计数据,那么它将尝试进行采样。
因此,为了模拟执行计划,需要导入所有统计数据。