v3.1.2版本,count(distinct xx)统计信息不准

hi,将 analyze 信息反馈下,

感谢反馈,可否提供下文本信息,截图信息不是很全,可以在 linux 环境下执行输出到文本

explain SELECT LEFT(XF_QXSWJG_DM,7),COUNT(DISTINCT XFSBH)
FROM BK_DZDZ.DZDZ_FPXX_ZZSFP_FH A6
WHERE A6.ZFRQ IS NULL
AND A6.KPRQ>=DATE_FORMAT(DATE_ADD(‘2020-8-7’,INTERVAL -7 DAY),’%Y-%m-%d’)
AND A6.KPRQ<DATE_FORMAT(‘2020-8-7’,’%Y-%m-%d’) – 增值税发票
AND XF_QXSWJG_DM LIKE ‘1370681%’
GROUP BY LEFT(XF_QXSWJG_DM,7)

sql查询结果:1425

±---------------------------±------±----------±----------------------------------------------------------------------------------------+
| id | count | task | operator info |
±---------------------------±------±----------±----------------------------------------------------------------------------------------+
| Projection_5 | 1.00 | root | left(bk_dzdz.a6.xf_qxswjg_dm, 7), 3_col_0 |
| └─HashAgg_7 | 1.00 | root | group by:col_2, funcs:count(distinct col_0), firstrow(col_1) |
| └─Projection_23 | 0.00 | root | bk_dzdz.a6.xfsbh, bk_dzdz.a6.xf_qxswjg_dm, left(bk_dzdz.a6.xf_qxswjg_dm, 7) |
| └─IndexLookUp_15 | 0.00 | root | |
| ├─IndexScan_12 | 0.01 | cop[tikv] | table:A6, index:KPRQ, range:[2020-07-31 00:00:00,2020-08-07 00:00:00), keep order:false |
| └─Selection_14 | 0.00 | cop[tikv] | isnull(bk_dzdz.a6.zfrq), like(bk_dzdz.a6.xf_qxswjg_dm, “1370681%”, 92) |
| └─TableScan_13 | 0.01 | cop[tikv] | table:A6, keep order:false |
±---------------------------±------±----------±----------------------------------------------------------------------------------------+

explain SELECT COUNT(DISTINCT XFSBH)
FROM BK_DZDZ.DZDZ_FPXX_ZZSFP_FH A6
WHERE A6.ZFRQ IS NULL
AND A6.KPRQ>=DATE_FORMAT(DATE_ADD(‘2020-8-7’,INTERVAL -7 DAY),’%Y-%m-%d’)
AND A6.KPRQ<DATE_FORMAT(‘2020-8-7’,’%Y-%m-%d’) – 增值税发票
AND XF_QXSWJG_DM LIKE ‘1370681%’

sql查询结果:2968

±-----------------------±------±----------±----------------------------------------------------------------------------------------+
| id | count | task | operator info |
±-----------------------±------±----------±----------------------------------------------------------------------------------------+
| StreamAgg_10 | 1.00 | root | funcs:count(distinct bk_dzdz.a6.xfsbh) |
| └─IndexLookUp_24 | 0.00 | root | |
| ├─IndexScan_21 | 0.01 | cop[tikv] | table:A6, index:KPRQ, range:[2020-07-31 00:00:00,2020-08-07 00:00:00), keep order:false |
| └─Selection_23 | 0.00 | cop[tikv] | isnull(bk_dzdz.a6.zfrq), like(bk_dzdz.a6.xf_qxswjg_dm, “1370681%”, 92) |
| └─TableScan_22 | 0.01 | cop[tikv] | table:A6, keep order:false |
±-----------------------±------±----------±----------------------------------------------------------------------------------------+

explain SELECT COUNT(1)
FROM (
SELECT XFSBH
FROM BK_DZDZ.DZDZ_FPXX_ZZSFP_FH A6
WHERE A6.ZFRQ IS NULL
AND A6.KPRQ >= DATE_FORMAT(DATE_ADD(‘2020-8-7’, INTERVAL - 7 DAY), ‘%Y-%m-%d’)
AND A6.KPRQ < DATE_FORMAT(‘2020-8-7’, ‘%Y-%m-%d’) – 增值税发票
AND XF_QXSWJG_DM LIKE ‘1370681%’
GROUP BY XFSBH
) A

sql查询结果:1343(与oracle 11.2 结果一致)
±-------------------------±------±----------±----------------------------------------------------------------------------------------+
| id | count | task | operator info |
±-------------------------±------±----------±----------------------------------------------------------------------------------------+
| StreamAgg_12 | 1.00 | root | funcs:count(1) |
| └─HashAgg_15 | 1.00 | root | group by:bk_dzdz.a6.xfsbh, funcs:firstrow(1) |
| └─IndexLookUp_31 | 0.00 | root | |
| ├─IndexScan_28 | 0.01 | cop[tikv] | table:A6, index:KPRQ, range:[2020-07-31 00:00:00,2020-08-07 00:00:00), keep order:false |
| └─Selection_30 | 0.00 | cop[tikv] | isnull(bk_dzdz.a6.zfrq), like(bk_dzdz.a6.xf_qxswjg_dm, “1370681%”, 92) |
| └─TableScan_29 | 0.01 | cop[tikv] | table:A6, keep order:false |
±-------------------------±------±----------±----------------------------------------------------------------------------------------+

group_distinct (1.9 KB) group_subset_count (1.8 KB) no_group_distinct (1.5 KB)

你好,group_distinct 和 group_subset_count 的结果都和 oracle 不一样吗

结果在帖子里面写的很清楚,都不一样。

非常感谢您的反馈,请问这些表结构和数据方便上传,我们复现下问题吗?多谢。

业务数据,数据涉密,不太可能提供,数据从oracle实时ogg过来的,记录条数检查过。

  1. 那表结构可以给吗? 或者说您能用测试数据复现问题,给我们一个最小的case就行。多谢。
  2. 请问是哪个版本?

XFSBH 请问这个字段的类型是什么?

是varchar

1。凡涉及这种distinct的聚合统计都存在这问题
2。V3.1.2

好的,如果方便给一个小的测试表结构和sql,可以更快速复现,我现在也自己试试。

按照我的理解,尝试了下没有复现
create table DZDZ_FPXX_ZZSFP_FH( ZFRQ varchar(20),KPRQ varchar(50),XFSBH varchar(30));

MySQL [ryl]> insert into DZDZ_FPXX_ZZSFP_FH values(‘aaa’,‘2020-08-04’,‘aaa’);
Query OK, 1 row affected (0.05 sec)

MySQL [ryl]> insert into DZDZ_FPXX_ZZSFP_FH values(‘bbb’,‘2020-08-05’,‘bbb’);
Query OK, 1 row affected (0.02 sec)

MySQL [ryl]> insert into DZDZ_FPXX_ZZSFP_FH values(‘ccc’,‘2020-08-06’,‘ccc’);
Query OK, 1 row affected (0.02 sec)

MySQL [ryl]> insert into DZDZ_FPXX_ZZSFP_FH values(‘ccc’,‘2020-08-06’,‘ccc’);
Query OK, 1 row affected (0.02 sec)

MySQL [ryl]> insert into DZDZ_FPXX_ZZSFP_FH values(‘bbb’,‘2020-08-05’,‘bbb’);
Query OK, 1 row affected (0.01 sec)

MySQL [ryl]> insert into DZDZ_FPXX_ZZSFP_FH values(‘aaa’,‘2020-08-04’,‘aaa’);
Query OK, 1 row affected (0.02 sec)

MySQL [ryl]> insert into DZDZ_FPXX_ZZSFP_FH values(‘aaa’,‘2020-08-04’,‘aaa’);
Query OK, 1 row affected (0.02 sec)

MySQL [ryl]> insert into DZDZ_FPXX_ZZSFP_FH values(‘bbb’,‘2020-08-05’,‘bbb’);
Query OK, 1 row affected (0.01 sec)

MySQL [ryl]> insert into DZDZ_FPXX_ZZSFP_FH values(‘ccc’,‘2020-08-06’,‘ccc’);
Query OK, 1 row affected (0.01 sec)

MySQL [ryl]> SELECT COUNT(DISTINCT XFSBH)
-> FROM DZDZ_FPXX_ZZSFP_FH A6
-> WHERE A6.KPRQ>=DATE_FORMAT(DATE_ADD(‘2020-8-7’,INTERVAL -7 DAY),’%Y-%m-%d’)
-> AND A6.KPRQ<DATE_FORMAT(‘2020-8-7’,’%Y-%m-%d’);
±----------------------+
| COUNT(DISTINCT XFSBH) |
±----------------------+
| 3 |
±----------------------+
1 row in set (0.00 sec)

MySQL [ryl]> SELECT COUNT(1)
-> FROM (
-> SELECT XFSBH
-> FROM DZDZ_FPXX_ZZSFP_FH A6
-> WHERE A6.KPRQ >= DATE_FORMAT(DATE_ADD(‘2020-8-7’, INTERVAL - 7 DAY), ‘%Y-%m-%d’)
-> AND A6.KPRQ < DATE_FORMAT(‘2020-8-7’, ‘%Y-%m-%d’)
-> GROUP BY XFSBH
-> ) A;
±---------+
| COUNT(1) |
±---------+
| 3 |
±---------+
1 row in set (0.01 sec)

https://github.com/pingcap/tidb/pull/17106 您好,我们发现是这个没有包含在 3.1.2 版本中,请等待下一个 3.1.3 版本或者我们建议直接用 4.0 的版本。

最开始我们尝试的是v4.0,但是发现OGG莫名错误,没法实时同步业务数据,所以才选择的3.1 rc,目前已经升级到3.1.2

3.1.2 还没有包含,等到 3.1.3 之后再尝试下吧,麻烦了,多谢。

我们可以购买运维服务吗

右下角点击 联系社区专家,可以登记相关信息及需求,会有商务侧同学跟进。