GBase 8a
性能调优
文章

多个相关子查询(exists或not exists)拉复制优化

发表于2024-08-01 14:41:5534次浏览0个评论

多个相关子查询(exists或not exists)拉复制优化

SQL样例:select … from t1 where not exists() (subquery1) and not exists (subquery2) and not exists (subquery3) ...类似包含多个exists或not exists

分析过程:SQL中包含多个相关子查询,如果where条件中包含两个表的hash列等值关系,正常关联,否则默认就要将相关子查询拉复制,如果相关子查询数据量很大,就会造成性能很差,如下图所示,第一个相关子查询where条件中不包含两个表的hash列等值关系,将第一个相关子查询拉成了复制(BROADCAST),第二个相关子查询包含两个表的hash列等值关系,正常关联。

优化方法:调整参数_t_gcluster_multi_corrquery_optimize,默认值为0,即多个相关子查询拉复制,将参数调整为1,就会走重分布,如下图所示,相关子查询1变为了数据重分布,性能由75s提升至3s

评论

登录后才可以发表评论