ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 超出统计信息最大最小值范围后,基数的改变

超出统计信息最大最小值范围后,基数的改变

原创 Linux操作系统 作者:wei-xh 时间:2012-03-08 10:43:13 0 删除 编辑

直方图超出范围后,基数的表现:

先创建了一张表,skew列的值收集了等频直方图,列的值存在如下规律,1将出现1次,2将出现2次,3将出现3. . . . .80将出现80次。

 

可以从上图中的结果看到,超出范围后,ORACLE都采用了数字1来作为基数。如果使用的是统计信息记录的查询变量也都得到了正确的基数。对于skew=:bind的情况,都采用了num_rows/num_distinct进行计算。经过验证,等频直方图的density=1/(2*num_rows)。可能这也是为什么当我们请求的区间越界后,得到的基数总是1的原因。等高直方图的density算法比较复杂,对于在最大值,最小值范围内的非高频值的绑定变量查询,ORACLE采用density来进行计算,而不是(1/num_distinct).

 

 

对于表上不存在直方图的列。进行范围查询的时候,对超出最小值,最大值记录范围内的查询值的计算:

示例里的测试表month_no一共1-1212个整数值,每个值对应100条记录,一共1200条记录。超出查询范围后,ORACLE默认的采用month_nu=一个常量来进行计算。

 

对于表上不存在直方图的列。进行in list查询的时候,对超出最小值,最大值记录范围内的查询值的计算:

 

 

 

可以看到10.1.0.4后,ORACLE对于超出最小最大值范围内的查询值,得出的基数呈递减的趋势。

这对于某些从不更新统计信息的应用可能并不是一个好消息。可能到了某个时间,你的查询计划会出现剧烈的波动。

{4BCF02D5-610F-4696-89FB-83E23BD52440}.jpg

{B36BA92A-AE5B-4EEC-887C-E9930CFE17D3}.jpg

{7F9BD503-0091-4274-9317-446F586AD5AA}.jpg

{C3B33B4A-319A-41A8-9BEB-2F38D259372D}.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22034023/viewspace-718046/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2281191