【正确答案】对于没有收集统计信息的表,Oracle为了能够得到相对准确的执行计划,会在执行SQL之前对SQL语句涉及的表做动态采样(Dynamic Sampling,从Oracle 11gR2开始称之为Dynamic Statistic)。
有两种方法可以开启动态采样:
1)将参数OPTIMIZER_DYNAMIC_SAMPLING的值设为大于或等于1。从Oracle 10g开始,该值默认为2,若设置为0,则禁用动态采样。
2)使用动态采样的Hint:DYNAMIC_SAMPLING(T LEVEL)。该Hint表示对目标表T强制使用等级为参数level指定值的动态采样。
默认采样数据块数量受隐含参数“_OPTIMIZER_DYN_SMP_BLKS”的控制,其默认值是32,表示动态采样时默认采样数据块数量为32。
下表针对Oracle 11.2.0.4(对Oracle 10g而言,采样的数据块数量有差异,详见官方文档)不同采样级别的差异。
【答案解析】