MySQL 5.1 リファレンスマニュアル :: 10 データタイプ :: 10.5 データタイプが必要とする記憶容量
« 10.4.5 SET タイプ

10.6 カラムに適したタイプの選択 »
Section Navigation      [Toggle]
  • 10 データタイプ
  • 10.1 データタイプ概要
  • 10.2 数値タイプ
  • 10.3 日付と時刻タイプ
  • 10.4 文字列タイプ
  • 10.5 データタイプが必要とする記憶容量
  • 10.6 カラムに適したタイプの選択
  • 10.7 その他のデータベースエンジンのデータタイプの利用

10.5. データタイプが必要とする記憶容量

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(p) 4 bytes if 0 <= p <= 24, 8 bytes if 25 <= p <= 53
FLOAT 4バイト
DOUBLE [PRECISION], REAL 8 バイト
DECIMAL(M,D), NUMERIC(M,D) 変動; 後の説明を参照
BIT(M) 約(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(M) M バイト、0 <= M <= 255
VARCHAR(M) L + 1 バイト、 一方で L <= M そして 0 <= M <= 255 (下のメモを参照) または L + 2 バイト、一方で L <= M そして 256 <= M <= 65535 (下のメモを参照).
BINARY(M) M バイト、0 <= M <= 255
VARBINARY(M) L + 1 バイト 一方で L <= M そして 0 <= M <= 255 (下のメモを参照) または L + 2 バイト、 一方で L <= M そして 256 <= M <= 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('value1','value2',...) 列挙値により1か2バイト(最高65,535値)
SET('value1','value2',...) セットメンバの数により、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)/8 バイトをコピーします。SET は最高64メンバを持つ事ができます。項10.4.5. 「SET タイプ」を参照してください。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates