このセクションでは、InnoDB
ストレージエンジンの InnoDB
テーブル、インデックス、テーブルスペース、およびその他の側面の制限について説明します。
テーブルには、最大 1017 カラムを含めることができます。 仮想生成カラムはこの制限に含まれます。
テーブルには、最大で 64 個のセカンダリインデックスを含めることができます。
-
DYNAMIC
またはCOMPRESSED
の行形式を使用するInnoDB
テーブルでは、インデックスキーの接頭辞の長さの制限は 3072 バイトです。REDUNDANT
またはCOMPACT
の行形式を使用するInnoDB
テーブルのインデックスキー接頭辞の長さ制限は 767 バイトです。 たとえば、utf8mb4
文字セットおよび各文字の最大 4 バイトを想定して、TEXT
またはVARCHAR
カラムで 191 文字を超える column prefix インデックスを使用して、この制限に達する場合があります。制限を超えるインデックスキー接頭辞の長さを使用しようとすると、エラーが返されます。
MySQL インスタンスの作成時に
innodb_page_size
オプションを指定して、InnoDB
のページサイズを 8K バイトまたは 4K バイトまで小さくすると、16K バイトのページサイズに対応する 3072 バイトの制限に基づいて、比例的にインデックスキーの最大長も短くなります。 つまり、インデックスキーの最大長は、ページサイズが 8K バイトのときは 1536 バイト、ページサイズが 4K バイトのときは 768 バイトになります。インデックスキー接頭辞に適用される制限は、フルカラムインデックスキーにも適用されます。
-
複数カラムインデックスには最大 16 カラムを使用できます。 制限を超えると、エラーが返されます。
ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed
-
オフページに格納されている可変長カラムを除く最大行サイズは、4K バイト、8K バイト、16K バイト、および 32K バイトのページサイズではページの半分よりわずかに小さくなります。 たとえば、デフォルトの
innodb_page_size
16KB の最大行サイズは約 8000 バイトです。 ただし、64KB のInnoDB
ページサイズの場合、最大行サイズは約 16000 バイトです。LONGBLOB
およびLONGTEXT
のカラムは 4GB 未満である必要があり、BLOB
およびTEXT
のカラムを含む合計行サイズは 4GB 未満である必要があります。行の長さが 1 ページの半分より短い場合は、行全体がそのページ内にローカルに格納されます。 セクション15.11.2「ファイル領域管理」で説明したように、半ページを超える行では、その行が半ページ以内に収まるように、可変長カラムが外部オフページストレージの対象として選択されます。
InnoDB
では内部的に 65,535 バイトを超える行サイズがサポートされますが、MySQL 自体では、すべてのカラムの合計サイズに 65,535 の行サイズ制限が課されます。 セクション8.4.7「テーブルカラム数と行サイズの制限」を参照してください。一部の古いオペレーティングシステムでは、ファイルは 2G バイトよりも小さくする必要があります。 これは
InnoDB
の制限ではありません。 大規模なシステムテーブルスペースが必要な場合は、1 つの大規模なデータファイルではなく複数の小規模なデータファイルを使用して構成するか、file-per-table および一般的なテーブルスペースデータファイルにテーブルデータを分散します。InnoDB
ログファイルの最大サイズの合計は 512GB です。-
テーブルスペースの最小サイズは、10M バイトをわずかに超える大きさです。 テーブルスペースの最大サイズは、
InnoDB
のページサイズによって異なります。表 15.31 InnoDB テーブルスペースの最大サイズ
InnoDB ページサイズ 最大テーブルスペースサイズ 4KB 16TB 8KB 32TB 16KB 64TB 32KB 128TB 64KB 256TB 最大テーブルスペースサイズは、テーブルの最大サイズでもあります。
ファイル名を含むテーブルスペースファイルのパスは、Windows での
MAX_PATH
制限を超えることはできません。 Windows 10 より前では、MAX_PATH
の制限は 260 文字です。 Windows 10 バージョン 1607 では、MAX_PATH
の制限は共通の Win32 ファイルおよびディレクトリ機能から削除されていますが、新しい動作を有効にする必要があります。同時読取り /書込みトランザクションに関連する制限については、セクション15.6.6「undo ログ」 を参照してください。