為了提高列存模式下的壓縮效率,降低儲存成本,您可以為建立的列存索引設定壓縮演算法。本文介紹如何設定和修改列存索引的壓縮演算法。
支援的壓縮演算法
當前PolarDB MySQL版支援兩種IMCI的壓縮演算法:LZ4壓縮、ZSTD壓縮。
LZ4:一種無損資料壓縮演算法,壓縮速度大於每核500 MB/s。具體可參見LZ4 GitHub。
ZSTD(全稱Zstandard):一種無損資料壓縮演算法,壓縮速度與LZ4相當。具體可參見Zstandard GitHub。
建表時設定壓縮演算法
文法:
在建表時,您只需要在CREATE TABLE語句的COMMENT欄位裡設定codec_opt參數,即可設定IMCI的壓縮演算法。
COMMENT 'COLUMNAR=1 codec_opt={LZ4}'codec_opt有效取值為
LZ4、ZSTD和NONE,對應LZ4壓縮、ZSTD壓縮和不使用壓縮。說明imci_default_codec參數定義了預設壓縮演算法。當COMMENT中預設codec_opt時,將根據該參數的值採用對應的壓縮演算法。該參數預設值為
ZSTD。您可以執行SET命令在SESSION層級修改imci_default_codec的值。
在表的COMMENT欄位中指定的壓縮演算法將應用在表的所有列索引上。如果同時在列的COMMENT中設定了壓縮演算法,將以列的配置優先。
樣本:
CREATE TABLE t12( col1 INT, col2 DATETIME, col3 VARCHAR(200) ) ENGINE InnoDB COMMENT 'COLUMNAR=1 codec_opt={LZ4}'; SET imci_default_codec="{LZ4}"; CREATE TABLE t13( col1 INT COMMENT 'codec_opt={NONE}', col2 DATETIME, col3 VARCHAR(200) 'codec_opt={ZSTD}' ) ENGINE InnoDB COMMENT 'COLUMNAR=1';從以上樣本中可以看到:
表
t12使用COMMENT欄位指定了表的預設壓縮演算法為LZ4。col1、col2和col3列的資料都使用LZ4演算法進行壓縮。表
t13未設定表的壓縮演算法,col1單獨配置為不開啟壓縮;col2未設定codec_opt,將使用參數imci_default_codec配置的壓縮演算法,使用LZ4演算法壓縮;col3設定codec_opt={ZSTD},由於列的配置優先順序高於表以及預設配置,因此col3使用ZSTD壓縮演算法。
修改列的壓縮演算法
目前尚不支援修改單列資料的壓縮演算法。若要修改,需要刪除原來的資料,再使用新的建表語句,指定列的新壓縮演算法。修改單列資料的壓縮方式將在後續版本中推出。
樣本:
CREATE TABLE t14(
col1 INT COMMENT 'COLUMNAR=1 codec_opt={ZSTD}',
col2 DATETIME COMMENT 'COLUMNAR=1 codec_opt={ZSTD}',
col3 VARCHAR(200)
) ENGINE InnoDB;
-- 修改列存索引的壓縮演算法
ALTER TABLE t14 COMMENT 'COLUMNAR=1', MODIFY COLUMN col2 DATETIME COMMENT 'codec_opt={LZ4}';在以上樣本中,表t14的col2列上已經建立列索引,壓縮演算法為ZSTD。若執行樣本中的命令嘗試將其修改為LZ4,不會立即生效,需要重建資料時才會生效。由於該命令不會觸發資料重建,因此資料(包括後續新增資料)仍使用之前的指定的壓縮方式。