love wife & love life —Roger的Oracle&MySQL技术博客

Phone:18180207355 提供专业Oracle&MySQL数据恢复、性能优化、迁移升级、紧急救援等服务

about partiton column with date or varchar2?

本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger的Oracle&MySQL技术博客

本文链接地址: about partiton column with date or varchar2?

最近有一个需求需要了解关于分区列字段的选择的问题,下面进行了简单的测试:

我们可以看到,对于date,varchar2和number类型,cbo对于card的计算是有差异的,相比之下,date最小。

下面分别来看下3个sql 的10053 trace:

####### 10053 trace

—— tab2

这里似乎跟cbo 上面描述的出入,这是正常的,当取值超过范围时,
oracle会使用一个估算的selectivity。

—– tab3

######### 测试分区

我们知道between and是等价于>= and <= 的,其计算selectivity的公式如下: selectivity=(high_limit – low_limit)/(high_value – low_value)+1/num_distinct+1/num_distinct 上面的3个sql查询,我们发现根据这个公式去计算存在一定的差异。 虽然从test来看,似乎有些失败,但是至少我们可以得出如下几个结论: 1. 当列取值超过范围时,oracle针对该列会使用估算的selectivity. 2. 对于分区表按照时间的分区进行的范围分区,对于分区键,不推荐使用除date或timestamp之外的其他的类型。 3. oracle 优化器在处理date,number和varchar2类型时是不同的。 4. 针对CBO一书,第6章节还需要进行大量的测试,毕竟oracle的cbo算法是在不断的改进。

Leave a Reply

You must be logged in to post a comment.