10bet网址
MySQL5.6版本リファレンスマニュアル
下载本手册

MySQL5.6版本リファレンスマニュアル/データ型/ データ型のストレージ要件

11.7データ型のストレージ要件

ディスク上のテーブルデータのストレージ要件は、複数の要因によって異なります。別々のストレージエンジンは異なる方法でデータ型を表し、ローデータを格納します。カラムか行全体のどちらかでテーブルデータを圧縮できますが、テーブルまたはカラムのストレージ要件の計算が複雑になります。

ディスク上のストレージレイアウトが違っていても、テーブル行に関する情報を通信および交換する内部 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.バイト
浮动(P) 0 <=P<= 24 の場合は 4.バイト、25 <=P<= 53 の場合は 8.バイト
浮动 4.バイト
双精度真的 8.バイト
十进制(M,D)数字(M,D) 変動; 次の説明を参照
钻头(M) 約 (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) M×Wバイト、0<=M<=255、ここでWは、文字セット内の最大長の文字に必要なバイト数です。InnoDB公司テーブルの烧焦データ型のストレージ要件の詳細は、セクション14.2.13.7「物理的な行構造」を参照してください。
二进制(M) Mバイト、0<=M<=255
瓦尔查尔(M)变量二进制(M) カラム値が 0から 255バイトを必要とする場合は、L+ 1 バイト、値が 255バイト以上を必要とする可能性のある場合は、L+ 2 バイト
小珠TINYTEXT公司 L+ 1 バイト、ここでL< 28.
斑点文本 L+ 2 バイト、ここでL< 216
中伞形花序中文本 L+ 3 バイト、ここでL< 224
长滴长文本 L+ 4 バイト、ここでL< 232
枚举('价值1','价值2',...) 列挙値の数 (最大 65,535 個の値) により 1.または 2.バイト
设置('价值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「设置」型」を参照してください。