MySQLにサポートされているデータタイプが必要とする記憶容量がカテゴリごとにリストされています。
MyISAM
テーブル内の行の最大サイズは65,534バイトです。BLOB
と TEXT
カラムはそれぞれ、このサイズに対してたった5から9バイトを占めています。
重要NDBCluster
ストレージエンジンを利用しているテーブルには、必要とする記憶容量を計算する際考慮するべき
4-byteアラインメント
の要因があります。これは、全ての
NDB
データ格納が4バイトの倍数単位で行われるという意味になります。それ故、—テーブルの中で
NDB
以外のストレージエンジンを利用している
—カラム値は、格納に15バイトを利用し、NDB
テーブルの中で16バイトを必要とします。この要求は、このセクションで紹介される他の全ての条件に当てはまります。例えば、NDBCluster
テーブルの中で、
TINYINT
、SMALLINT
、MEDIUMINT
、そして
INTEGER
(INT
)カラムタイプはそれぞれ1つのレコードにつき4バイトを必要とします。
さらに、クラスタテーブルが必要とする記憶容量を計算する時、NDBCluster
ストレージエンジンを利用する全てのテーブルがプライマリキーを要求する事を覚えておく必要があります。もしプライマリキーがユーザによって定義されない時は、NDB
によって 「隠れ」
プライマリキーが作成されます。この隠れプライマリキーは1つのテーブルレコードに付き31から35バイトを消費します。
クラスタメモリ要求を計算する時には、MySQLForge
で有効な ndb_size.pl
ユーティリティが便利です。このPerlスクリプトは現在のMySQL(非クラスタ)データベースに接続し、そのデータベースが
NDBCluster
ストレージエンジンを利用するとどれくらいの容量を必要とするかについてのレポートを作成します。
数値タイプが必要とする記憶容量
データタイプ | 要求ストレージ |
TINYINT |
1バイト |
SMALLINT |
2バイト |
MEDIUMINT |
3バイト |
INT , INTEGER
|
4バイト |
BIGINT |
8バイト |
FLOAT( |
4 bytes if 0 <= p <= 24, 8 bytes if 25
<= p <= 53 |
FLOAT |
4バイト |
DOUBLE [PRECISION] , REAL
|
8 バイト |
DECIMAL( ,
NUMERIC(
|
変動; 後の説明を参照 |
BIT( |
約(M +7)/8 バイト |
DECIMAL
(とNUMERIC
)カラムの値は、少数第9位(10基準)の桁を4バイトにパックするバイナリフォーマットを利用して表現されます。各値の整数部と端数部の格納は別々に決定されます。9桁の倍ごとに4バイト、「余りの」
桁には4バイトの端数容量がそれぞれ必要です。余りの桁に必要なストレージ要求を以下のテーブルで紹介します。
余り桁数 | バイト数 |
0 | 0 |
1 | 1 |
2 | 1 |
3 | 2 |
4 | 2 |
5 | 3 |
6 | 3 |
7 | 4 |
8 | 4 |
データと時刻タイプが必要とする記憶容量
データタイプ | 記憶容量 |
DATE |
3バイト |
DATETIME |
8バイト |
TIMESTAMP |
4バイト |
TIME |
3バイト |
YEAR |
1バイト |
文字列タイプの記憶容量
データタイプ | 記憶容量 |
CHAR( |
バイト、0
<= 255 |
VARCHAR( |
L + 1 バイト、 一方で
そして 0
<= 255 (下のメモを参照)
または
L + 2 バイト、一方で
そして 256
<= 65535 (下のメモを参照). |
BINARY( |
バイト、0
<= 255 |
VARBINARY( |
L + 1 バイト 一方で
そして 0
<= 255 (下のメモを参照)
または
L + 2 バイト、 一方で
そして 256
<= 65535 (下のメモを参照). |
TINYBLOB , TINYTEXT
|
L +1 バイト、一方で
L <
28
|
BLOB , TEXT
|
L +2 バイト 一方で
L <
216
|
MEDIUMBLOB , MEDIUMTEXT
|
L +3 バイト、一方で
L <
224
|
LONGBLOB , LONGTEXT
|
L +4 バイト、一方で
L <
232
|
ENUM(' |
列挙値により1か2バイト(最高65,535値) |
SET(' |
セットメンバの数により、1、2、3、4、または8バイト(最高64メンバ) |
CHAR
、VARCHAR
、そして
TEXT
タイプでは、先行テーブルの中の
L
と M
の値は文字数として解釈される必要があり、そしてカラム仕様の中のこれらのタイプの長さは文字数を表します。例えば、TINYTEXT
値を格納するには、L
文字に加え1バイトが必要です。
VARCHAR
、VARBINARY
、そして
BLOB
と TEXT
タイプは可変長タイプです。それぞれが必要とする記憶容量はこれらの要因によって決まります。
カラム値の実長さ
カラムの可能最大長さ
カラムに使用される文字セット
例えば、VARCHAR(10)
カラムは最大長さ10の文字列を保持する事ができます。カラムが
latin1
文字セットを利用すると仮定すると(一文字につき1バイト)、実際の記憶容量は文字列の長さ(L
)と、その文字列の長さを記録する1バイトです。'abcd'
文字列では、L
は4で、必要とする記憶容量は5バイトです。もし同じカラムが代わりに
VARCHAR(500)
として宣言されていたら、その文字列
'abcd'
は 4 + 2 = 6
バイトを必要とします。カラム長は255以上なので、プリフィックスには1バイトではなく2バイトが要求されます。
特定の
CHAR
、VARCHAR
、または
TEXT
カラム値を格納するのに利用される
バイト
数を計算するには、そのカラムに利用される文字セットを考慮に入れなければいけません。特に、utf8
ユニコード文字セットを利用する時には、全ての
utf8
文字セットが同じバイト数を利用するわけではないという事を覚えておく必要があります。utf8
文字の異なるカテゴリに利用される格納についての概要は、項9.7. 「Unicodeのサポート」
を参照してください。
注:VARCHAR
や VARBINARY
カラムの
有効 最大長は65,532です。
MySQL 5.1の NDBCLUSTER
ストレージエンジン
は可変幅カラムをサポートします。これは、そのような値が4バイトにそろっている場合以外は、MySQLクラスタテーブルの
VARCHAR
カラムが、他のストレージエンジンを利用した時と同じ容量を必要とするという意味になります。それ故、latin1
文字セットを利用する VARCHAR(50)
カラムに格納された 'abcd'
文字列は8バイトを必要とします。(MyISAM
テーブルの中の同じカラム値に必要とされる6バイトではない)これは、VARCHAR(50)
カラムが、格納された文字列の長さに関わらず、1つのレコードにつき52バイトを必要としていた、NDBCLUSTER
の初期バージョンからの変更点を表しています。
BLOB
と TEXT
タイプは、そのタイプの最大長さにより、カラム値の長さを記録する為に1、2、3、またはバイトを必要とします。項10.4.3. 「BLOB
とTEXT
タイプ」を参照してください。
TEXT
と BLOB
カラムは、TEXT
カラム内のそれぞれの行が二つの部分で構成される、NDBクラスタストレージエンジンの中で異なる方法で実行されます。そのうちの1つは固定サイズ(256バイト)で、実際に元のテーブルに格納されます。それ以外の物は、隠れテーブルに格納された256バイト以上のデータで構成されます。この二つ目のテーブルの行は常に2,000バイトの長さです。もし
サイズ
<= 256
(サイズ
が行のサイズを表している)時、TEXT
カラムのサイズは256で、そうでない時のサイズは256
+ サイズ
+ (2000 –
(サイズ
– 256) %
2000)です。
ENUM
オブジェクトのサイズは異なる列挙値の数によって決定します。1バイトは、最大255の値を持つ列挙に使用されます。2バイトは、256から65,535の間の値を持つ列挙に使用されます。項10.4.4. 「ENUM
タイプ」を参照してください。
SET
オブジェクトのサイズは異なるセットメンバの数によって決定します。もしセットサイズがN
なら、オブジェクトは1、2、3、4、または8バイトに丸められた
(
バイトをコピーします。N
+7)/8SET
は最高64メンバを持つ事ができます。項10.4.5. 「SET
タイプ」を参照してください。