MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

15.9.1.2 圧縮テーブルの作成

圧縮テーブルは、file-per-table テーブルスペースまたは general tablespaces で作成できます。 テーブル圧縮は、InnoDB system tablespace では使用できません。 システムテーブルスペース (領域 0、.ibdata files) には、ユーザーが作成したテーブルを含めることができますが、圧縮されない内部システムデータも含まれます。 したがって、圧縮は file-per-table または general テーブルスペースに格納されているテーブル (およびインデックス) にのみ適用されます。

File-Per-Table テーブルスペースでの圧縮テーブルの作成

file-per-table テーブルスペースに圧縮テーブルを作成するには、innodb_file_per_table を有効にする必要があります (デフォルト)。 このパラメータは、MySQL 構成ファイル (my.cnf または my.ini) で設定するか、SET ステートメントを使用して動的に設定できます。

innodb_file_per_table オプションの構成後、CREATE TABLE ステートメントまたは ALTER TABLE ステートメントで ROW_FORMAT=COMPRESSED 句または KEY_BLOCK_SIZE 句 (あるいはその両方) を指定して、file-per-table テーブルスペースに圧縮テーブルを作成します。

たとえば、次のステートメントを使用できます:

SET GLOBAL innodb_file_per_table=1;
CREATE TABLE t1
 (c1 INT PRIMARY KEY)
 ROW_FORMAT=COMPRESSED
 KEY_BLOCK_SIZE=8;
一般テーブルスペースでの圧縮テーブルの作成

一般的なテーブルスペースに圧縮テーブルを作成するには、テーブルスペースの作成時に指定される一般的なテーブルスペースに対して FILE_BLOCK_SIZE を定義する必要があります。 FILE_BLOCK_SIZE 値は、innodb_page_size 値に関連する有効な圧縮ページサイズである必要があり、CREATE TABLE または ALTER TABLE KEY_BLOCK_SIZE 句で定義された圧縮テーブルのページサイズは FILE_BLOCK_SIZE/1024 と同じである必要があります。 たとえば、innodb_page_size=16384 および FILE_BLOCK_SIZE=8192 の場合、テーブルの KEY_BLOCK_SIZE は 8 である必要があります。 詳細は、セクション15.6.3.3「一般テーブルスペース」を参照してください。

次の例は、一般的なテーブルスペースの作成および圧縮テーブルの追加を示しています。 この例では、デフォルトの innodb_page_size が 16K であると想定しています。 8192 の FILE_BLOCK_SIZE では、圧縮テーブルの KEY_BLOCK_SIZE が 8 である必要があります。

mysql> CREATE TABLESPACE `ts2` ADD DATAFILE 'ts2.ibd' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;

mysql> CREATE TABLE t4 (c1 INT PRIMARY KEY) TABLESPACE ts2 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
メモ
圧縮テーブル上の制約