2011-12-17 7 views
3

そのMySQL 5.6 manualに言う:列が4バイトに9進(ベース10)桁パックバイナリフォーマットを使用して表されDECIMAL(およびNUMERIC)のため小数点(2,1)のストレージ要件は何ですか?

値。各値の整数部と小数部の格納は別々に決定されます。 9桁の各倍数には4バイトが必要で、「残余」桁には4バイトの一部が必要です。過剰の桁に必要なストレージは、以下の表で与えられます。数字はそれはまだ4つのバイトを使用し、小数点以下のそれぞれの側に9未満の場合や、

+----------------------------------+ 
|Leftover Digits | Number of Bytes | 
+----------------------------------+ 
|  0  |  0  | 
+----------------------------------+ 
|  1  |  1  | 
+----------------------------------+ 
|  2  |  1  | 
+----------------------------------+ 
|  3  |  2  | 
+----------------------------------+ 
|  4  |  2  | 
+----------------------------------+ 
|  5  |  3  | 
+----------------------------------+ 
|  6  |  3  | 
+----------------------------------+ 
|  7  |  4  | 
+----------------------------------+ 
|  8  |  4  | 
+----------------------------------+ 

私の質問は、彼らが意志「残り物」とみなされますか?

+0

抜粋からは、「残ったもの」だけが* me *に使用されているようですが、たとえば... 6桁は0 9桁のグループ(0バイト)+ 1 6桁のグループ(3バイト)です。 7/8桁の "残り物"にはまだ完全な4バイトが必要です。質問への私の答えは、おそらく間違っている可能性があります - 1 + 1 = 2バイトです。 MySQLで使用されているこの実際の空間を客観的に測定する方法はありますか?それは確かに言うだろう:) –

+0

@pst:はい、私は直接測定が最も客観的だと思います。私はマニュアルに明白に記載されていない理由を疑問に思い、誰かが私に正しい解釈を示すことができると思った。 –

答えて

0

MyISAMテーブルを使用していくつかの測定を行いましたが、いくつかの列を6行のデータに追加した後、テーブルdec.MYDのファイルサイズを比較して回答を得ました。ここで私が得るものです:

Original: 
-rw-rw----. 1 mysql mysql 54 Dec 17 18:49 dec.MYD 

Add one column of DECIMAL(2,1): 
-rw-rw----. 1 mysql mysql 66 Dec 17 18:51 dec.MYD 

Further add one column of DECIMAL(4,1): 
-rw-rw----. 1 mysql mysql 84 Dec 17 18:51 dec.MYD 

結論:

DECIMAL(2,1) requires (66-54)/6 = 2 bytes in total 
DECIMAL(4,1) requires (84-66)/6 = 3 bytes in total 

注最初の列は関係なく、それがDECIMAL(2,1)かであるかどうかの常に7バイトであるように思わとしてテストはそれほど単純ではないことINT。上記の結果を再現するために列を追加する必要があります。

関連する問題