關於直方圖中關於字元型別的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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於long型別的轉換型別
- 關於mysql中欄位定義的型別int、tinyint區別MySql型別
- 關於列的直方圖統計資訊直方圖
- 關於Oracle字元型別的比較Oracle字元型別
- 欄位的資料型別隱式轉換有關係資料型別
- 關於高度均衡和頻率均衡的直方圖直方圖
- 關於mysql字元和數字型別轉換的問題研究MySql字元型別
- 【關於Javascript】--- 隱式型別轉換篇JavaScript型別
- [BUG反饋]關於ot模型中的時間型別欄位bug問題模型型別
- 關於Ibatis 轉換 oracle date型別的問題BATOracle型別
- 關於分組後欄位拼接的問題[行列轉換]『By duanzilin』
- 關於oracle中blob欄位的錄入問題Oracle
- 關於sqlite的特殊字元轉義SQLite字元
- 關於oracle中的sql資料型別OracleSQL資料型別
- 關於 Exception:Xml中的非法字元ExceptionXML字元
- 關於 Go 中 Map 型別和 Slice 型別的傳遞Go型別
- 多型關聯自定義的型別欄位的處理多型型別
- 關於Java中進位制轉換以及位運算問題Java
- 關於隱式資料型別轉換的一些試驗資料型別
- MySQL information_schema庫中關於三個關於鎖相關表的欄位解釋彙總MySqlORM
- 關於tc型別的enqueue等待型別ENQ
- 字元型別轉換字元型別
- Android中關於DP與PX的轉換Android
- 關於cin能識別輸入的資料型別(過載操作符&型別轉換)資料型別
- 關於日期及時間欄位的查詢
- 關於MYSQL中FLOAT和DOUBLE型別的儲存MySql型別
- 關於SQL Server 中的25種資料型別SQLServer資料型別
- MongoDB中的欄位型別IdMongoDB型別
- 關於在textarea中輸入回車換行和空格字元的正常顯示 (轉)字元
- 關於 PHP 的資料型別 (一)PHP資料型別
- 關於 PHP 的資料型別 (二)PHP資料型別
- 關於 PHP 的資料型別 (三)PHP資料型別
- 關於database link的物件型別Database物件型別
- Mysql資料庫表關於幾個int型別的字元長度MySql資料庫型別字元
- 關於引用型別轉化的一些東西型別
- Java中關於String型別的10個問題Java型別
- 關於sqlserver字元型別查詢條件區分大小寫SQLServer字元型別
- 關於結構體型別的學習結構體型別