1. 首页
  2. IT资讯

关于直方图中关于字符类型的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://www.cxybcw.com/183384.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code