TDSQL Boundless 自定义列存排序键

列存只读分析实例默认按照表的主键对数据进行重新组织,并以列式格式存储在列存节点。该方式能有效提升基于主键的查询效率以及过滤场景的扫描效率。当业务查询主要依赖非主键字段进行过滤或排序时,基于主键的排序可能无法发挥最佳性能。此时可通过自定义列存排序键进一步优化查询效率。典型场景如 SaaS 业务中常以租户 ID 作为过滤条件,即可将租户 ID 设置为排序键。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

注意:自定义列存排序键会触发数据重新组织,期间同步延迟会明显增加,建议在业务低峰期操作。

一、使用限制

·自定义排序键必须包含表的主键列。若用户指定的排序键未包含主键,系统会自动将主键列追加到排序键末尾。

·不支持无主键表设置自定义排序键。

·自定义排序键最多包含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,请勿重复书写。

·排序键列名不能重复。

·修改排序键建议在业务低峰期进行,避免同步延迟增加影响分析查询的数据时效性。

赞 (0)
上一篇 4天前
下一篇 4天前