ディスク上のテーブルデータのストレージ要件は、複数の要因によって異なります。別々のストレージエンジンは異なる方法でデータ型を表し、ローデータを格納します。カラムか行全体のどちらかでテーブルデータを圧縮できますが、テーブルまたはカラムのストレージ要件の計算が複雑になります。
ディスク上のストレージレイアウトが違っていても、テーブル行に関する情報を通信および交換する内部 MySQL APIは、すべてのストレージエンジンにわたって適用される一貫したデータ構造を使用します。
このセクションでは、データ型の固定サイズ表現を使用するストレージエンジンの内部形式およびサイズを含め、MySQL数据库がサポートするデータ型ごとのストレージ要件に関するガイドラインおよび情報について説明します。情報はカテゴリまたはストレージエンジンごとに示します。
テーブルの内部表現の最大行サイズは 65,535 バイトであり、ストレージエンジンがこれ以上のサイズの行をサポートできる場合でもこのサイズになります。斑点
または文本
カラムはこのサイズに 9から 12バイトしか関与しないので、これらのカラムはこのサイズに含まれません。斑点
および文本
データについての情報は、行バッファーとは異なるメモリー領域に内部的に格納されます。それぞれのストレージエンジンは、対応する型の処理に使用する方法に従って異なる方法で、このデータの割り当ておよびストレージを扱います。詳細は、第15章「代替ストレージエンジン」およびセクションD.10.4“安全”テーブルカラム数と行サイズの制限」を参照してください。
InnoDB公司テーブルのストレージ要件
InnoDB公司
テーブルのストレージ要件の詳細は、セクション14.2.13.7「物理的な行構造」を参照してください。
NDB群集テーブルのストレージ要件
国家数据库
テーブルは、4.バイトアライメントを使用します。すべての国家数据库
データストレージは、4.バイトの倍数で行われます。したがって、通常であれば 15バイトを使用するカラム値は、国家数据库
テーブルでは 16バイトを必要とします。たとえば、国家数据库
テーブルでは、锡
、斯莫林
、中微子
、および整数
(国际的
) カラム型はそれぞれ、アライメント係数により、レコードあたり 4.バイトのストレージが必要になります。
各钻头(
カラムはM
)M
ビットのストレージ領域を使用します。各钻头
カラムは 4.バイトアライメントが行われていませんが、国家数据库
は、钻头
カラムに必要な最初の 1.から 32ビットに行あたり 4.バイト (32ビット) を、33から 64ビットに別の 4.ビットを、というように予約します。
无效的
自体はストレージ領域を必要としませんが、国家数据库
は、テーブル定義に无效的
として定義されたカラム (最大 32の无效的
カラム) が含まれる場合、行あたり 4.バイトを予約します。(MySQL群集テーブルが 32以上の无效的
カラムから 64の无效的
カラムで定義されている場合、行あたり 8.バイトが予約されます。)
国家数据库
ストレージエンジンを使用するすべてのテーブルで主キーが必要になります。主キーを定義していない場合、「非表示」の主キーが国家数据库
によって作成されます。この非表示の主キーはテーブルレコードあたり 31から 35バイトを消費します。
ndb\ U大小.plPerl语言スクリプトを使用して、国家数据库
ストレージ要件を評価します。これは、(MySQL群集ではなく) 現在の MySQL数据库データベースに接続し、そのデータベースが国家数据库
ストレージエンジンを使用した場合にどれだけの領域を必要とするかについてレポート作成します。詳細は、セクション18.4.25「ndb\ U大小.pl-NDB群集サイズ要件エスティメータ」を参照してください。
数値型のストレージ要件
データ型 | 必要なストレージ |
---|---|
锡 |
1.バイト |
斯莫林 |
2.バイト |
中微子 |
3.バイト |
国际的 、整数 |
4.バイト |
比基特 |
8.バイト |
浮动( |
0 <=P <= 24 の場合は 4.バイト、25 <=P <= 53 の場合は 8.バイト |
浮动 |
4.バイト |
双精度 、真的 |
8.バイト |
十进制( 、数字( |
変動; 次の説明を参照 |
钻头( |
約 (M +7)/8 バイト |
十进制的
(および数字
) カラムの値は、9桁の 10進数 (10進法) を 4.バイトにパックするバイナリ形式を使用して表現されます。各値の整数部と小数部のストレージは、個別に決定されます。9桁の倍ごとに 4.バイトが必要であり、「余りの」桁には 4.バイトのうちの一部が必要です。余りの桁に必要なストレージ要件を次の表に示します。
余りの桁 | バイト数 |
---|---|
0 | 0 |
1. | 1. |
2. | 1. |
3. | 2. |
4. | 2. |
5. | 3. |
6. | 3. |
7. | 4. |
8. | 4. |
日付と時間型のストレージ要件
时间
、日期时间
、および时间戳
カラムの場合、MySQL5.6.4版本よりも前に作成されたテーブルに必要なストレージは、5.6.4 以降で作成されたテーブルとは異なります。これは、5.6.4 で、0から 3.バイトを必要とする小数部をこれらの型が持つことを許可するように変更されたためです。
データ型 | MySQL5.6.4版本より前で必要なストレージ | MySQL5.6.4版本以降で必要なストレージ |
---|---|---|
年 |
1.バイト | 1.バイト |
日期 |
3.バイト | 3.バイト |
时间 |
3.バイト | 3.バイト + 小数秒ストレージ |
日期时间 |
8.バイト | 5.バイト + 小数秒ストレージ |
时间戳 |
4.バイト | 4.バイト + 小数秒ストレージ |
MySQL5.6.4版本以降、年
および日期
のストレージは変更ありません。ただし、时间
、日期时间
、および时间戳
は異なって表現されます。日期时间
はより効率的にパックされ、非小数部に必要なバイト数は 8.バイトではなく 5.バイトであり、3.つの部分すべてに、格納値の小数秒精度に応じて 0から 3.バイトが必要な小数部があります。
小数秒精度 | 必要なストレージ |
---|---|
0 | 0バイト |
1、2 | 1.バイト |
3、4 | 2.バイト |
5、6 | 3.バイト |
たとえば、时间(0)
、时间(2)
、时间(4)
、および时间(6)
はそれぞれ 3、4、5、6 バイトを使用します。时间
と时间(0)
は同等で、必要なストレージは同じです。
時間値の内部表現の詳細は、「MySQL内部:重要的算法和结构」を参照してください。
文字列型のストレージ要件
次の表では、M
は宣言されたカラムの長さを、非バイナリ文字列型の場合は文字数で、バイナリ文字列型の場合はバイト数で表します。L
は指定された文字列値の実際の長さをバイト数で表します。
データ型 | 必要なストレージ |
---|---|
字符( |
M ×W バイト、0<= 255、ここでW は、文字セット内の最大長の文字に必要なバイト数です。InnoDB公司 テーブルの烧焦 データ型のストレージ要件の詳細は、セクション14.2.13.7「物理的な行構造」を参照してください。 |
二进制( |
M バイト、0<= 255 |
瓦尔查尔( 、变量二进制( |
カラム値が 0から 255バイトを必要とする場合は、L + 1 バイト、値が 255バイト以上を必要とする可能性のある場合は、L + 2 バイト |
小珠 、TINYTEXT公司 |
L + 1 バイト、ここでL < 28. |
斑点 、文本 |
L + 2 バイト、ここでL < 216 |
中伞形花序 、中文本 |
L + 3 バイト、ここでL < 224 |
长滴 、长文本 |
L + 4 バイト、ここでL < 232 |
枚举(' |
列挙値の数 (最大 65,535 個の値) により 1.または 2.バイト |
设置(' |
セットメンバーの数 (最大 64メンバー) により、1、2、3、4、または 8.バイト |
可変長の文字列型は、長さプリフィクスが付いたデータを使用して格納されます。長さプリフィクスにはデータ型に応じて 1.から 4.バイトが必要で、プリフィクスの値はL
(文字列のバイト長) です。たとえば、中文本
値のストレージには、値を格納するためのL
バイトに加えて、値の長さを格納するための 3.バイトが必要です。
特定の烧焦
、瓦尔查尔
、または文本
カラム値の格納に使用されるバイト数を計算するには、そのカラムに使用される文字セットと、値にマルチバイト文字が含まれるかどうかを考慮する必要があります。特に、utf8型
(またはutf8mb4接口
)Unicode码文字セットを使用する場合、すべての文字セットが同じバイト数を使用するわけではなく、文字あたり最大 3 (4) バイトを必要とするわけではないことに注意する必要があります。utf8型
またはutf8mb4接口
文字の異なるカテゴリに使用されるストレージの詳細は、セクション10.1.10「Unicode码」のサポート」を参照してください。
瓦尔查尔
、变量二进制
、および斑点
と文本
型は可変長型です。それぞれのストレージ要件は次の要因によって決まります。
カラム値の実際の長さ
カラムの可能な最大の長さ
カラムに使用される文字セット。一部の文字セットにはマルチバイト文字が含まれるため。
たとえば、瓦尔查尔(255)
カラムには最大 255文字の長さの文字列を格納できます。そのカラムが拉丁语1
文字セット (1.文字あたり 1.バイト) を使用すると仮定すると、実際に必要なストレージは文字列の長さ (L
) に、文字列の長さを記録するための 1.バイトを加えた大きさとなります。文字列'abcd'
の場合、L
は 4.で、ストレージ要件は 5.バイトになります。同じカラムが代わりにダブルバイト文字セットucs2型
を使用するように宣言されている場合、ストレージ要件は 10バイトになります。'abcd'
の長さは 8.バイトで、カラムの最大長が 255よりも大きい (最大 510バイト) ため、長さを格納するために 2.バイト必要になります。
瓦尔查尔
または变量二进制
カラムに格納できる有効な最大バイト数は最大行サイズ (65,535 バイト、すべてのカラムで共有される) によって決まります。複数バイト文字を格納する瓦尔查尔
カラムの場合、文字の有効な最大数は少なくなります。たとえば、utf8型
の文字は 1.文字につき最大 3.バイトを必要とする場合があるため、utf8型
の文字セットを使用する瓦尔查尔
カラムは、最大 21,844 文字になるように宣言できます。セクションD.10.4“安全”テーブルカラム数と行サイズの制限」を参照してください。
国家数据库
ストレージエンジンは可変幅カラムをサポートします。これは、MySQL群集テーブル内の瓦尔查尔
カラムは、このような値に対して 4.バイトアライメントが行われる点を除き、ほかのストレージエンジンと同じ容量のストレージを必要とするということを意味します。したがって、拉丁语1
文字セットを使用して瓦尔查尔(50)
カラムに格納された文字列'abcd'
は、(密萨姆
テーブル内の同じカラム値に対する 5.バイトではなく) 8.バイトを必要とします。
文本
と斑点
カラムは、国家数据库
ストレージエンジンでは異なって実装されます。ここでは、文本
カラム内の各行は 2.つの別々の部分から構成されています。そのうちの 1.つは固定サイズ (256バイト) で、実際に元のテーブルに格納されます。もう 1.つは 256バイトを超えるデータで構成され、非表示のテーブルに格納されます。2.番目のテーブルの行の長さは常に 2,000 バイトです。これは、大小
<= 256 (ここで大小
は行のサイズを表します) の場合、文本
カラムのサイズが 256であり、それ以外の場合はサイズが 256 +大小
+ (2000 − (大小
− 256) % 2000) であることを意味します。
枚举
オブジェクトのサイズは異なる列挙値の数によって決まります。最大 255の値を持つ列挙に 1.バイトが使用されます。256から 65,535 の値を持つ列挙に 2.バイトが使用されます。セクション11.4.4「列举型」を参照してください。
套
オブジェクトのサイズは異なるセットメンバーの数によって決まります。セットサイズがN
である場合、オブジェクトは 1、2、3、4、または 8.バイトに丸められた(
バイトを占めます。N
+7)/8套
は最大 64メンバーを持つことができます。セクション11.4.5「设置」型」を参照してください。