列存只读分析实例默认按照表的主键对数据进行重新组织,并以列式格式存储在列存节点。该方式能有效提升基于主键的查询效率以及过滤场景的扫描效率。当业务查询主要依赖非主键字段进行过滤或排序时,基于主键的排序可能无法发挥最佳性能。此时可通过自定义列存排序键进一步优化查询效率。典型场景如 SaaS 业务中常以租户 ID 作为过滤条件,即可将租户 ID 设置为排序键。
注意:
自定义列存排序键会触发数据重新组织,期间同步延迟会明显增加,建议在业务低峰期操作。
使用限制
自定义排序键必须包含表的主键列。若用户指定的排序键未包含主键,系统会自动将主键列追加到排序键末尾。
不支持无主键表设置自定义排序键。
自定义排序键最多包含8个字段列(该上限包含自动补入的主键列)。
不支持以下类型的列作为排序键:
FLOAT、DOUBLE、LONGTEXT、BLOB(含 TINYBLOB、MEDIUMBLOB、LONGBLOB)、BOOLEAN、JSON。不支持中文列名或包含特殊字符的列作为排序键,列名只能包含字母、数字和下划线。
对已设置自定义排序键的表,若对排序键中的列执行
DROP COLUMN、MODIFY COLUMN、RENAME COLUMN、CHANGE COLUMN 或 DROP PRIMARY KEY,会导致该列存表的数据同步中断。操作步骤
通过 CREATE 语句创建自定义排序键表
在读写实例创建表时,可在表定义的
COMMENT 注释中通过 order_key=column1,column2 指定排序键。多列之间用英文逗号分隔。当 COMMENT 中包含其他信息时,建议使用空格将 order_key 与其他内容隔开,便于阅读。CREATE TABLE '表名' (...) COMMENT 'order_key=column_name[,column_name]';
示例:
CREATE TABLE part (p_partkey BIGINT NOT NULL PRIMARY KEY,p_name VARCHAR(55) NOT NULL,p_mfgr CHAR(25) NOT NULL,p_brand CHAR(10) NOT NULL,p_type VARCHAR(25) NOT NULL,p_size BIGINT NOT NULL,p_container CHAR(10) NOT NULL,p_retailprice DECIMAL(15,2) NOT NULL,p_comment VARCHAR(23) NOT NULL) COMMENT '零件信息表 order_key=p_brand,p_container,p_type';
通过 ALTER 语句修改排序键
对已创建的表,可在读写实例中执行
ALTER TABLE 修改 COMMENT,为表设置或变更自定义排序键。ALTER TABLE table_name COMMENT 'order_key=column_name[,column_name]';
示例:
ALTER TABLE part COMMENT '零件信息表 order_key=p_brand,p_container,p_type';
确认排序键修改结果
目前暂不提供排序键调整进度的查询接口。修改排序键期间,表依然支持查询。由于排序键变更会触发数据重新组织,同步延迟会在期间增加。可通过观察列存表的同步延迟,判断排序键变更是否完成。
使用建议
order_key 关键字必须使用下划线形式(order_key),不支持 orderkey、orderKey 等其他写法。同一
COMMENT 中仅能指定一次 order_key,请勿重复书写。排序键列名不能重复。
修改排序键建议在业务低峰期进行,避免同步延迟增加影响分析查询的数据时效性。