炫“库”行动—人大金仓有奖征文——金仓分析型数据库系统如何选择表分布策略及分布键

【本文正在参与炫“库”行动—人大金仓有奖征文】人大金仓有奖征文 (csdn.net)https://bss.csdn.net/m/topic/kingbase 在金仓分析型数据库系统KingbaseAnalyticsDB创建表时,DISTRIBUTED BY语句用于定义表的分布策略。不同的分布策略决定了表中的数据如何切分到不同的KingbaseAnalyticsDB实例上。金仓分析型数据库系统KingbaseAnalyticsDB提供了 3 种分布策略:HASH 分布、随机分布、复制...
摘要由CSDN通过智能技术生成

【本文正在参与炫“库”行动—人大金仓有奖征文】

人大金仓有奖征文 (csdn.net)https://bss.csdn.net/m/topic/kingbase


        在金仓分析型数据库系统KingbaseAnalyticsDB创建表时,DISTRIBUTED  BY语句用于定义表的分布策略。不同的分布策略决定了表中的数据如何切分到不同的KingbaseAnalyticsDB实例上。金仓分析型数据库系统KingbaseAnalyticsDB提供了 3 种分布策略:HASH 分布、随机分布、复制分布。

一、分布策略

1.1、HASH 分布

        创建表时,指定一个或多个列用于hash分布(称为分布键)。通过分布键计算出每个记录的hash值再分布到对应的KingbaseAnalyticsDB实例上。相同hash值的记录会分布到相同的KingbaseAnalyticsDB实例。选择重复值较少的字段作为分布键,可以确保KingbaseAnalyticsDB各个实例数据分布均匀。一般这个分布列可能在其它表中具有主键特征(不建议创建主键,很影响加载性能),例如身份证号码。另外,在选择分布键时,也需要考虑大表与大表之间的关联,避免关联查询时数据重新分布或分发。

CREATE TABLE COMPANY(
   ID             INT     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
) DISTRIBUTED BY (ID);

--插入100000条数据
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) SELECT A, 'Paul', 32, 'California', A FROM GENERATE_SERIES(1,100000) A;

CREATE TABLE DEPARTMENT(
   ID             INT      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      NOT NULL
) DISTRIBUTED BY (EMP_ID);

--插入100000条数据
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) SELECT A, 'IT Billing', A FROM GENERATE_SERIES(1,100000) A;

        使用ID字段关联COMPANY表、DEPARTMENT表记录。当分布键与关联字段不相同时,通过执行计划可以看出,DEPARTMENT表广播(Broadcast:各个实例将自己的数据分发给其它实例)数据到各个实例,影响了查询性能。

postgres=# EXPLAIN ANALYZE SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.ID;
                                                                     QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------
 Gather Motion 6:1  (slice2; segments: 6)  (cost=2534.00..14092.00 rows=100001 width=60) (actual time=189.948..1654.684 rows=100000 loops=1)
   ->  Hash Join  (cost=2534.00..14092.00 rows=16667 width=60) (actual time=220.309..1597.873 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值