为 MPP 数据库中的表选择散列分布键
要选择有效的散列分布键,您需要检查表定义以及针对该表发出的任何查询。
开始之前
要选择有效的散列分布键,需要收集有关该表及其使用方式的信息:
- 表定义 - 主键、唯一键、生成列、列数据类型
- 表数据 - 不同值的数目、值的分布
- 针对表发出的查询 - 连接、相等性谓语
关于此任务
在 MPP 数据库中,集群中所有节点上的系统资源(内存、存储器和处理器等资源)划分为逻辑单元,称为数据切片。使用散列分布时,数据库管理器通过将散列算法应用于分布键的各列中的值,在数据切片之间分布表中各行的数据。
有效的散列分布键可通过两种不同方式提高查询性能:
-
在所有数据切片之间均匀分布表数据
均匀分布有多项优势:- 将查询处理并行度最大化
- 高效使用可用的存储空间
-
将不同表中通常一起访存的行并置到一起
当通常一起访存的行位于同一数据切片时,访存这些行所花费的时间量将会减少。
通常,均匀分布优先于行并置。
对于较小的表,分布键对查询性能的影响较小。对于较大的表,分布键会显著影响查询性能。
过程
将表中所有的列都视为分布键的候选,并根据以下四个条件排除列或选择列:
示例
CREATE TABLE EMPLOYEE
(
ID INT NOT NULL,
NAME VARCHAR(250) NOT NULL,
RESUME CLOB,
HIRE_DATE DATE,
IS_MANAGER CHAR(1),
OFFICE_NUMBER INT
)
ORGANIZE BY ROW其他信息:
- IS_MANAGER 列的值只能是“Y”或“N”。
- 经理需要定期对这个表以及另一个名为 SALES 的表发出查询,以便按每个员工生成总销售额报告:
... WHERE SALES.SALES_PERSON_ID = EMPLOYEE.ID ... - 该公司只有 1 年的历史,50% 的员工是在过去的 7 月受聘。
可以使用以下逻辑来选择 EMPLOYEE 表的散列分布键:
| 条件 | 讨论 | 列 |
|---|---|---|
| 表定义 |
|
余下的候选项:
|
| 表数据 |
|
余下的候选项:
|
| 查询 |
|
建议:
余下的候选项:
|
| 常规 |
|
分布键:(ID) |