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

D.10.4テーブルカラム数と行サイズの制限

テーブルあたり 4096カラムというハード制限がありますが、特定のテーブルでは有効な最大数がこれより少なくなる可能性があります。正確な制限は、相互作用する複数の要因によって異なります。

  • すべてのテーブル (ストレージエンジンには無関係) の最大行サイズは 65,535 バイトです。ストレージエンジンではこの制限に対してさらなる制約を加えられる場合があり、有効な最大行サイズは少なくなります。

    すべてのカラムの合計長は最大行サイズを超えられないので、このサイズはカラム数 (およびサイズの可能性もあり) を制約します。たとえば、utf8型文字では、文字あたり最大 3.バイトが必要になるので、CHAR(255)字符集utf8カラムの場合、サーバーは値ごとに 255 × 3 = 765 バイトを割り当てる必要があります。この結果、テーブルにはこのようなカラムを 65,535 / 765 = 85 以上は含められません。

    可変長カラムのストレージには長さバイトが含まれ、これには行サイズに対して評価されます。たとえば、VARCHAR(255)字符集utf8カラムは、値の長さを格納するために 2.バイトを使用するので、それぞれの値は最大 767バイトを使用できます。

    斑点カラムと文本カラムは、その内容が行の残りとは別に格納されるので、行サイズに対してそれぞれ 9から 12 (1から4+8) バイトになります。

    カラムを无效的と宣言すると、使用できるカラムの最大数を減らすことができます。密萨姆テーブルの場合、无效的カラムは、値が无效的であるかどうかを記録するための追加領域を行内に必要とします。各无效的カラムは 1.ビット余分に占め、もっとも近いバイトまで丸められます。バイトでの最大の行長は次のように計算できます。

    行长=1+(列长度总和) + (空列数+删除\u标志+ 7)/8 + (可变长度列数)

    删除\u标志は静的行フォーマットのテーブルに対しては 1.です。静的テーブルは、行が削除されているかどうかを示すフラグとして、行レコード内の 1.ビットを使用します。このフラグは動的行ヘッダーに格納されるので、動的テーブルの場合、删除\u标志は 0です。密萨姆テーブル形式の詳細は、セクション15.2.3「MyISAM」テーブルのストレージフォーマット」を参照してください。

    InnoDB公司テーブルの場合、ストレージサイズは、无效的カラムおよび不为空カラムの場合と同じなので、前述の計算は適用されません。

    カラムが必要とするサイズが 32,765 + 2 バイトと 32,766 + 2 バイトであり、65,535 バイトの最大行サイズ以内に収まるので、テーブルt1级を作成する次のステートメントは成功します。

    mysql>创建表t1->(c1 VARCHAR(32765)NOT NULL,c2 VARCHAR(32766)NOT NULL)->引擎=MyISAM字符集1;查询正常,0行受影响(0.02秒)

    カラムは无效的であり、密萨姆が必要とする追加領域によって行サイズが 65,535 バイトを超えるので、テーブルt2级を作成する次のステートメントは失敗します。

    mysql>创建表t2->(c1 VARCHAR(32765)NULL,c2 VARCHAR(32766)NULL)->引擎=MyISAM字符集1;错误1118(42000):行大小太大。所用表类型(不包括blob)的最大行大小为65535。必须将某些列更改为TEXT或blob

    カラム長は 65,535 バイトの最大長内に収まっていますが、長さを記録するために 2.つの追加バイトが必要になり、このため行サイズが 65,535 バイトを超えるので、テーブルt3级を作成する次のステートメントは失敗します。

    mysql>创建表t3->(c1 VARCHAR(65535)NOT NULL)->引擎=MyISAM字符集1;错误1118(42000):行大小太大。所用表类型(不包括blob)的最大行大小为65535。必须将某些列更改为TEXT或blob

    カラム長を 65,533 以下に減らすと、ステートメントは成功します。

  • 個々のストレージエンジンで、テーブルカラム数を制限するその他の制約が適用される場合があります。例:

    • InnoDB公司が許可するカラム数は最大 1000です。

    • InnoDB公司は、データベースページ (約 8,000 バイト) の半分以下に行サイズを制限し、变量二进制瓦尔查尔斑点、または文本カラムを含みません。

    • 異なるInnoDB公司ストレージフォーマット (压缩的冗余) では、使用するページヘッダーおよびトレーラデータの量が違うため、行に使用できるストレージ量に影響がおよびます。

  • それぞれのテーブルにはテーブル定義を含む.frm公司ファイルがあります。この定義は、テーブルで許可されるカラム数に影響する方法でこのファイルの内容に影響を与えます。詳細は、セクションD.10.5.财务报表ファイル構造により課せられる制限」を参照してください。