1.9.2升级2.1.2 count(distinct) 问题

升级后 count(distinct ) 在查询超时

set exec_mem_limit=17179869184;
SELECT count(distinct territory_id ) from dim_sys_user_base

这个能查出来
不超时.txt (3.9 KB)

set exec_mem_limit=17179869184;
SELECT count(distinct system_user_id ) from dim_sys_user_base
这个超时

explain.txt (445 字节)

你好,请问下system_user_id和territory_id字段类型分别是?

这两个字段的主要区别就是system_user_id 唯一的,territory_id字段不唯一

都是varchar类型吗

都是varchar

我这边根据单分区数据量从新设置 buckets,让每个 buckets 的数量在500m以下就可以查出来

这个是查不出来的执行计划吧?给下可以查出来的执行计划explain costs

不超时explain.txt (1.1 KB)

您好 超时和不超时的explain中表的tablet个数不一致, 一个是1个,一个是100个吗

修改前tablet 是一样的,修改成调整了

修改前查不出来tablet个数是一样的,同样是1 ,后来我修改了tablet个数,可以查出来了

您可以使用

SELECT /*+ SET_VAR(new_planner_agg_stage= 4) */ count(distinct territory_id ) from dim_sys_user_base;

这种方法绕过,或者将表重新建一遍,将tablet数调大,不要使用1。
对于这种数据量较大的表我们不建议使用一个tablet,这将无法发挥多机多核的优势

现在已经删表重建了