MySQL HeatWave 用户指南  / 第 2 章热浪  / 2.7 工作负载优化  /  2.7.2 定义数据放置键

2.7.2 定义数据放置键

当数据加载到 HeatWave 中时,它默认按表的主键分区并水平切片以在 HeatWave 节点之间分布。数据放置键功能允许按JOIN或 键列对数据进行分区,这可以 通过避免在查询执行时在 HeatWave 节点之间重新分配数据相关的成本 GROUP BY来提高JOIN或查询性能。GROUP BY

通常,只有在按主键分区不能提供足够性能时才使用数据放置键。此外,为最耗时的查询保留数据放置键。在这种情况下,在最常用JOIN的键和运行时间最长的查询的键上定义数据放置键。

小费

对于数据放置键建议,请在将表加载到 HeatWave 并运行查询后使用 Advisor 实用程序。有关详细信息,请参阅 第 2.7.3 节“使用 Advisor 优化工作负载”

定义数据放置键需要添加带有数据放置关键字字符串的列注释:

RAPID_COLUMN=DATA_PLACEMENT_KEY=N

其中N是一个索引值,它定义了数据放置键的优先顺序。

  • 索引必须从 1 开始。

  • 允许的索引值范围从 1 到 16(含)。

  • 一个索引值不能在同一个表中重复。例如,您不能将索引值 2 分配给同一表中的多个列。

  • 不允许索引值出现差距。例如,如果您定义一个索引值为 3 的数据放置键列,则还必须有另外两个索引值分别为 1 和 2 的数据放置键列。

CREATE TABLE您可以在or ALTER TABLE语句 中定义数据放置关键字字符串 :

CREATE TABLE orders (date DATE COMMENT 'RAPID_COLUMN=DATA_PLACEMENT_KEY=1');
ALTER TABLE orders MODIFY date DATE COMMENT 'RAPID_COLUMN=DATA_PLACEMENT_KEY=1';

以下示例显示了定义为数据放置键的多个列。虽然定义了主键,但数据由数据放置键分区,数据放置键优先于主键。

CREATE TABLE orders (
  id INT PRIMARY KEY, 
  date DATE COMMENT 'RAPID_COLUMN=DATA_PLACEMENT_KEY=1',
  price FLOAT COMMENT 'RAPID_COLUMN=DATA_PLACEMENT_KEY=2'
);

将多个列定义为数据放置键时,根据查询成本对键进行优先级排序。例如,分配DATA_PLACEMENT_KEY=1给成本最高的查询 DATA_PLACEMENT_KEY=2的键,以及下一个成本最高的查询的键,等等。

笔记

列注释中允许包含其他信息。例如,允许在数据放置关键字字符串旁边指定列描述:

COMMENT 'column_description RAPID_COLUMN=DATA_PLACEMENT_KEY=1'

要修改或删除数据放置键,请参阅 第 2.4 节“修改表”中描述的过程。

使用说明:

  • JOINGROUP BY 查询优化仅在至少一个JOINGROUP BY 关系具有与定义的数据放置键匹配的键时应用。

  • 如果一个JOIN操作可以在有或没有查询优化的情况下执行JOINGROUP BY编译时成本模型将决定查询的执行方式。成本模型使用估计的统计数据。

  • 不能在字典编码的字符串列上定义数据放置键,但允许在可变长度编码的列上定义。默认情况下,HeatWave 将可变长度编码应用于字符串列。请参阅 第 2.7.1 节,“编码字符串列”

  • 只能在具有受支持数据类型的列上定义数据放置键。请参阅 第 2.9 节,“支持的数据类型”

  • 不能将数据放置键列定义为 NOT SECONDARY列。请参阅 排除表列

  • 有关相关的元数据查询,请参阅 第 2.14 节,“元数据查询”