背景:
在用户的查询SQL中,经常使用聚集子查询,子查询如果不存在相关条件,则可以一次性计算出结果,在执行父查询的时候直接使用子查询的结果,如果子查询内部存在相关条件,在执行父查询的时候每次都需要调用子查询判断,执行效率低下。
聚集子查询消除是减少了表的访问和连续求值的次数来改善查询性能。
下面举例说明:
1、针对单表所有聚合(min/max/avg/count/sum)进行优化:Select id from t1 tt1 where id >=(select
min(id) from t1 tt2 where tt1.id=tt2.id);
2、针对多表聚合为无损聚合(min/max)进行优化:select t1.id from t1,t2 where t1.id=t2.id
and t1.sid>(select min(id) from t2
where t1.id=t2.id)
3、针对多表聚合为有损聚合(avg/sum/count)进行优化:select t1.id from t1,t2 where t1.id=t2.id
and t1.sid>(select avg(id) from t2
where t1.id=t2.id)
针对上面例子可以进行优化,通过改写sql来消除子查询最终改善查询性能。
设置参数:_t_gcluster_aggregate_subquery_elimination: 0 (关闭),
1(打开)
限制条件:
1、子查询必须是相关标量子查询
2、不能有group by limit distinct start with connect by
3、聚集查询在where或having条件内
4、关联条件只能是等值条件
5、关联条件数据同表同列
6、子查询的条件应该是父查询条件的子集(子查询中不能有不同于父查询的条件)
关于GBASE南大通用
天津南大通用数据技术股份有限公司(以下简称“南大通用”)成立于2004年,是具有自主知识产权的国产数据库产品与服务提供商。作为国家级高新技术企业、国家规划布局内重点软件企业、信创工委会成员企业(0048),南大通用已连续多年被工信部下辖的赛迪顾问评为国产数据库领军企业。
自成立以来,南大通用始终坚持自主创新,产品的核心技术及底层代码自主可控,产品已通过分布式分析型数据库性能大规模专项评测(4096节点,世界规模最大)、等保四级、商用密码产品认证、涉密信息系统产品检测等资质认证。目前,南大通用已经成为国内少有的专注于数据库产品研发,并且在金融、电信行业得到规模化应用的独立数据库服务商。
经过十余年发展,南大通用构建了覆盖数据管理全生命周期、全技术栈的数据产品体系及服务解决方案,已成功为金融、电信、政务、能源、交通、国防军工等百余个行业上万家用户提供产品和服务,建立节点超过30000个,管理数据总量超过300PB。




