Oracle:导入表的统计信息后,优化器将使用动态采样
下面是我为Oracle:导入表的统计信息后,优化器将使用动态采样,oracle,optimization,rdbms,Oracle,Optimization,Rdbms,下面是我为scott.emp表所做的步骤 从emp中选择*,其中empno>7503 select*from表(dbms\u xplan.display\u光标) exec DBMS_STATS.GATHER_TABLE_STATS('scott','EMP') 从emp中选择*,其中empno>7503。 select*from表(dbms\u xplan.display\u光标) 导出表统计信息 清理实例并启动新实例 导入表统计信息 选择NUM_行、上次分析、全局统计、用户统计,从用户统计
scott.emp
表所做的步骤
从emp中选择*,其中empno>7503
select*from表(dbms\u xplan.display\u光标)代码>
exec DBMS_STATS.GATHER_TABLE_STATS('scott','EMP')代码>
从emp中选择*,其中empno>7503。
select*from表(dbms\u xplan.display\u光标)代码>
选择NUM_行、上次分析、全局统计、用户统计,从用户统计选项卡中选择用户统计,其中表_name='EMP'代码>
14 28-SEP-16 YES NO
从emp中选择*,其中empno>7503。
select*from表(dbms\u xplan.display\u光标)代码>
为什么优化器在第一次收集统计数据后不使用动态采样(步骤5)?找到了原因。在步骤8中,我只导入表统计信息。若我们导入数据库统计、系统统计、字典统计,那个么优化器就不会进行动态采样 优化器规则:如果优化器没有/没有足够的统计数据,那么它将尝试进行采样
因此,要模拟执行计划,需要导入所有统计数据。了解原因。在步骤8中,我只导入表统计信息。若我们导入数据库统计、系统统计、字典统计,那个么优化器就不会进行动态采样 优化器规则:如果优化器没有/没有足够的统计数据,那么它将尝试进行采样
因此,要模拟执行计划,需要导入所有统计数据。数据库的哪个版本?第7步到底意味着什么?您在第8步中导入了哪些统计数据?表emp是否已分区,是否有值7503的分区统计信息?你能发布完整的执行计划吗?在7中,卸载并重新安装了数据库。在第8章中,我只导入了表统计数据。没有一个表是不分区的。谢谢@stefan我知道为什么DS被优化器选中并在答案部分发布了相同的内容。是12c数据库吗?这是由12c特性“自适应执行计划”触发的新特性。是的,它是12c数据库。但要求不同,我需要在导入统计数据后匹配执行计划。数据库的哪个版本?第7步到底意味着什么?您在第8步中导入了哪些统计数据?表emp是否已分区,是否有值7503的分区统计信息?你能发布完整的执行计划吗?在7中,卸载并重新安装了数据库。在第8章中,我只导入了表统计数据。没有一个表是不分区的。谢谢@stefan我知道为什么DS被优化器选中并在答案部分发布了相同的内容。是12c数据库吗?这是由12c特性“自适应执行计划”触发的新特性。是的,它是12c数据库。但要求不同,我需要在导入统计数据后匹配执行计划。
-- No Dynamic sampling used --
14 28-SEP-16 YES NO
Note
-----
- dynamic statistics used: dynamic sampling (level=2)**