关于直方图中关于字符类型的ENDPOINT_VALUE字段的转换

  
今天看书(基于ORACLE的SQL优化)看到关于直方图dba_histograms ENDPOINT_VALUE字段的计算问题所以记录如下:
1、数字类型的ENDPOINT_VALUE没有什么悬念就是其本生的值
2、字符类型的ENDPOINT_VALUE计算相对复杂,是取字符的头15的字节经过16进制DUMP后在转换为十进制进行的
测试如下(以频率直方图为列):
SQL> select count(*),d from testh group by d order by d;
 
  COUNT(*) D
---------- --------------------
        70 chenxiuying
        10 gaopeng
        90 gaozhuheng
        30 gaozihan
        60 yanlei


TABLE_NAME                     ENDPOINT_VALUE           ENDPOINT_NUMBER
TESTH                        5.16154795827062E35     70
TESTH                        5.36782799271625E35     80
TESTH                        5.36782802370135E35     170
TESTH                         5.36782802371282E35     200
  TESTH                        6.30244062259123E35     260


如下我们来计算一下5.16154795827062E35,5.36782799271625E35,5.36782802370135E35,5.36782802371282E35,6.30244062259123E35是如何计算出来的
1、5.16154795827062E35
SQL> select dump('chenxiuying',16) from dual;
 
DUMP('CHENXIUYING',16)
-----------------------------------------------
Typ=96 Len=11: 63,68,65,6e,78,69,75,79,69,6e,67


SQL> select to_number('6368656e78697579696e6700000000','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') from dual;
 
TO_NUMBER('6368656E78697579696
------------------------------
           5.16154795827062E35
可以看到5.16154795827062E35已经计算出来了。
2、5.36782799271625E35
SQL> select dump('gaopeng',16) from dual;
 
DUMP('GAOPENG',16)
----------------------------------
Typ=96 Len=7: 67,61,6f,70,65,6e,67
 


SQL> select to_number('67616f70656e670000000000000000','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') from dual;
 
TO_NUMBER('67616F70656E6700000
------------------------------
           5.36782799271625E35


可以看到5.36782799271625E35已经计算出来了。


余下的使用相同的办法可以计算得出,当然其分布也是正常的,字段为chenxiuying为70行,字段为gaopeng为80-70为10行,可以看出没有问题。
但是一旦字符超过15个字节就会相同,就会出现分布异常的问题。

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

转载于:http://blog.itpub.net/7728585/viewspace-1384702/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值