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의 최대 길이는 232-2까지만 지원되며, 이는 공식 String Type Storage Requirements에서 지원하는 232-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);
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; | 비압축 열을 압축 열로 변경 |
매개변수 이름 | 동적 | 유형 | 기본 | 파라미터 값 범위 | 설명 |
cdb_column_compression_enabled | Yes | bool | FALSE | TRUE/FALSE | 컬럼 압축 스위치를 비활성화할 경우 압축 속성이 있는 새 테이블 생성이 허용되지 않으며, 기존 압축 속성 테이블은 영향을 받지 않습니다. |
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 | 컬럼 압축 횟수로, 비압축 형식과 압축 형식 두 가지 상태의 압축을 포함합니다. |
Innodb_column_decompressed | Integer | 컬럼 압축 해제 횟수로, 비압축 형식과 압축 형식 두 가지 상태의 압축 해제를 포함합니다. |
명칭 | 범위 | 설명 |
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 구문을 실행할 수 없습니다. |
BLOB(TINYBLOB, MEDIUMBLOB, LONGBLOB 포함)TEXT(TINYTEXT, MEDIUMTEXT, LONGTEXT 포함)VARCHARVARBINARYJSONCREATE TABLE t1(id INT PRIMARY KEY,b BLOB COMPRESSED);
CREATE TABLE t1(id INT PRIMARY KEY,b BLOB COLUMN_FORMAT COMPRESSED);
DDL | 압축 속성을 상속하는가 |
CREATE TABLE t2 LIKE t1; | Y |
CREATE TABLE t2 SELECT * FROM t1; | N |
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_zlib_column_compression_level | Yes | UINT | 6 | [0-9] | zlib 압축에서 0은 압축하지 않음을 의미하며, 1은 가장 빠른 압축, 9는 가장 높은 압축 수준을 나타냅니다. 1부터 9까지 숫자가 커질수록 압축 속도는 느려지지만 압축률은 높아집니다. |
innodb_zstd_column_compression_level | Yes | UINT | 3 | [1-22] | zstd 압축에서 1은 가장 빠른 압축을 나타내며, 22는 가장 높은 압축 수준을 나타냅니다. 1부터 22까지 숫자가 커질수록 압축 속도는 느려지지만 압축률은 높아집니다. |
innodb_min_column_compress_length | Yes | UINT | 256 | [1,UINT_MAX32] | 압축 임계값을 제어하는 단위는 바이트입니다. 열의 원본 길이가 이 매개변수 값보다 크거나 같은 경우 압축이 수행되며, 그렇지 않을 경우 압축 헤더만 추가되고 데이터는 실제로 압축되지 않습니다. |
CREATE TABLE t1(id INT PRIMARY KEY,b BLOB COMPRESSED ALGORITHM = [ZLIB|LZ4|ZSTD]);
CREATE TABLE t1(id INT PRIMARY KEY,b BLOB COLUMN_FORMAT COMPRESSED ALGORITHM = [ZLIB|LZ4|ZSTD]);
CREATE TABLE t2 (a VARCHAR(100) COMPRESSED) ENGINE=InnoDB;SHOW CREATE TABLE t2;
피드백