萌新的新奇的体验【玩转PB级数仓GaussDB(DWS)】
原来数据库还有这么多设置的吗,这么多年SQLboy白当了。虽然实际工作中会用到GaussDB但是真的就只是select from 就没了,今天学习了之后发现甚至还有好多属于都没见过。能这样云体验一下真的是太方便了。都体验完之后发现有过程记录功能。都是一点点截图的,还好最后的实验手册,性能调优实践的内容可以反复查看,有机会再尝试一下。>>>免费沙箱实验:如何实现GaussDB(DWS)性能调优
自己都不一定能看懂的过程总结:
(1)由于以上待定位的SQL查询中,WHERE字句是关联了表orders的o_custkey列,可以考虑把表orders的分布列o_orderkey修改为关联列o_custkey,以达到性能加速的目的。执行以下SQL进行分布列修改。
(2)插入数据之后要ANALYZE
(3) 使用分区
(4)关闭自动收集统计信息
(5)建立合适的索引,分布列 倾斜列
(6)自定义函数不下推 ALTER FUNCTION public.gen_period(timestamptz) NOT SHIPPABLE; 不可下推 性能劣化
(7)join 结论:HashJoin:内表小,外表大,执行高效!
;什么是Nest Loop?
表连接方式包括HashJoin、MergeJoin、NestLoop三种。其中,NestLoop表示嵌套循环,适用于被连接的数据子集较小的查询。
在嵌套循环中,外表驱动内表,外表返回的每一行都要在内表中检索找到它匹配的行,因此整个查询返回的结果集不能太大(不能大于10000),要把返回子集较小的表作为外表,而且在内表的连接字段上建议要有索引。
(8)使用Plan Hint进行调优
(9)NOT IN改写
EXPLAIN VERBOSE SELECT * FROM t1 WHERE t1.c NOT IN (SELECT t2.c FROM t2);从返回结果看到走NestLoop,因为NULL值跟任意值的OR运算结果都是NULL,上述条件表达式等价于t1.c <> ANY(t2.c) AND t1.c IS NOT NULL AND ANY(t2.c) IS NOT NULL。
EXPLAIN VERBOSE SELECT * FROM t1 WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE t2.c = t1.c);
(10)使用局部聚簇:局部聚簇 (Partial Cluster Key, 简称PCK),列存储下一种通过min/max稀疏索引实现基表快速扫描的一种索引技术。适用于列存大表点查询加速。ALTER TABLE orders_pck ADD PARTIAL CLUSTER KEY(o_orderkey);
【一起来玩转PB级数仓GaussDB(DWS),分享你的技术经验与体验心得,赢开发者大礼包!】第19期有奖征文火热进行中!
此外,在云声平台提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会赢取额外奖励。
- 点赞
- 收藏
- 关注作者
评论(0)