製品アップデート情報一覧
create table employee(id int, age int, gender boolean, other varchar(1000) primary key (id))があり、小さなフィールドであるid,age,genderへのアクセス頻度が比較的高い一方、大きなフィールドであるotherへのアクセス頻度が比較的低い場合は、other列を圧縮列として作成することができます。一般的な状況下では、otherの読み取り/書き込みの場合のみ、その列の圧縮と解凍がトリガーされ、その他の列へのアクセスでは列の圧縮と解凍はトリガーされません。これにより、行データストレージのサイズをさらに小さくできるため、アクセス頻繁が高い小さなフィールドはより速くなり、 ストレージ容量は比較的大きいがアクセス頻度が比較的低いフィールドについては、ストレージ容量をさらに削減することができます。BLOB(TINYBLOB、MEDIUMBLOB、LONGBLOBを含む)TEXT(TINYTEXT、MEDIUMTEXT、LONGTEXTを含む)VARCHARVARBINARYLONGBLOBとLONGTEXTのサポートする長さは最大$2^{32}-2$であり、公式String Type Storage Requirementsのサポートする$2^{32}-1$より1バイト少なくなっています。column_definitionのCOLUMN_FORMATの定義が一部異なります。また、列圧縮はInnodbストレージエンジンタイプのテーブルのみサポートしています。column_definition:data_type [NOT NULL | NULL] [DEFAULT default_value][AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY][COMMENT 'string'][COLLATE collation_name][COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}|COMPRESSED=[zlib]] # COMPRESSED圧縮列キーワード[STORAGE {DISK|MEMORY}][reference_definition]
CREATE TABLE t1(id INT PRIMARY KEY,b BLOB COMPRESSED);
zlib圧縮アルゴリズムを選択しています。圧縮アルゴリズムキーワードを表示させて指定することも可能ですが、現時点でサポートしているのはzlib圧縮アルゴリズムのみです。CREATE TABLE t1(id INT PRIMARY KEY,b BLOB COMPRESSED=zlib);
DDL | 圧縮属性継承の有無 |
CREATE TABLE t2 LIKE t1; | Y |
CREATE TABLE t2 SELECT * FROM t1; | Y |
CREATE TABLE t2(a BLOB) SELECT * FROM t1; | N |
DDL | 説明 |
ALTER TABLE t1 MODIFY COLUMN a BLOB; | 圧縮列を非圧縮に変更 |
ALTER TABLE t1 MODIFY COLUMN a BLOB COMPRESSED; | 非圧縮列を圧縮に変更 |
パラメータ名 | 動的 | タイプ | デフォルト | パラメータ値範囲 | 説明 |
innodb_column_compression_zlib_wrap | Yes | bool | TRUE | true/false | オンにするとデータのzlibヘッダーとzlibフッターを生成し、adler32チェックを行います |
innodb_column_compression_zlib_strategy | Yes | Integer | 0 | [0,4] | 列圧縮に使用する圧縮ポリシー。最小値は0、最大値は4で、0 - 4はそれぞれzlib中の圧縮ポリシー Z_DEFAULT_STRATEGY、Z_FILTERED、Z_HUFFMAN_ONLY、Z_RLE、Z_FIXED 一一に対応します。 一般的に、テキストデータにはZ_DEFAULT_STRATEGYが最適な場合が多く、画像データにはZ_RLEが最適です |
innodb_column_compression_zlib_level | Yes | Integer | 6 | [0,9] | 列圧縮に使用する圧縮レベル。最小値は0、最大値は9で、0は圧縮しないことを表します。この値が大きいほど、圧縮後のデータは小さくなりますが、圧縮時間は長くなります |
innodb_column_compression_threshold | Yes | Integer | 256 | [0, 0xffffffff] | 列圧縮に使用する圧縮しきい値。最小値は1、最大値は0xffffffff、単位はバイト。長さがこの値と同じか大きい場合のみデータが圧縮され、そうでない場合はオリジナルデータが維持されて圧縮ヘッダーのみ追加されます |
innodb_column_compression_pct | Yes | Integer | 100 | [1, 100] | 列圧縮に使用する圧縮率。最小値は1、最大値は100、単位は百分率。圧縮後のデータサイズ/圧縮前のデータサイズがこの値より低い場合のみデータが圧縮され、そうでない場合はオリジナルデータが維持されて圧縮ヘッダーのみ追加されます |
名称 | タイプ | 説明 |
Innodb_column_compressed | Integer | 列圧縮の圧縮回数。非圧縮形式と圧縮形式の2種類のステータスの圧縮を含む |
Innodb_column_decompressed | Integer | 列圧縮の解凍回数。非圧縮形式と圧縮形式の2種類のステータスの解凍を含む |
名称 | 範囲 | 説明 |
Compressed column '%-.192s' can't be used in key specification | 圧縮する列名を指定 | インデックスのある列に対し圧縮属性を指定することはできません |
Unknown compression method: %s" | DDLステートメントの中で指定する圧縮アルゴリズム名 | create tableまたはalter tableの際にzlib以外の不正な圧縮アルゴリズムを指定しています |
Compressed column '%-.192s' can't be used in column format specification | 圧縮する列名を指定 | 同一の列に、すでに COLUMN_FORMAT属性が指定されている場合は圧縮属性を指定できません。このCOLUMN_FORMATはNDBでのみ使用できます |
Alter table ... discard/import tablespace not support column compression | \\ | 圧縮列のあるテーブルでは Alter table ... discard/import tablespaceステートメントは実行できません |
フィードバック