数据查询结果和预期不符

【 TiDB 版本】V7.5.4
【遇到的问题:问题现象及影响】
有两张表数据量如下图。一张 1500 万行,一张 2300 万行
表A数据量
表B数据量

分别执行下图中sql,具体结果如下图。首先,第一张图中的结果从业务上看,数量不符。其次,第二句取值为空也不正确。 想知道是哪里使用不正确还是什么问题。

1 个赞

看下两个语句的执行计划

**


**

第一句改成count(*) 什么结果

用explain analyze 看下

count(*) 跟count(fld_guid)返回的结构不一样,表里本来就有空数据?

理论上有空数据count字段返回少,* 返回多,这里是反的

1 个赞

他count* 返回15327560,count字段返回15327118,我应该没看错吧

没看错,count(*) 执行计划应该走的索引,可能索引有问题

这个应该没问题。业务在跑,所以数据是变化的。并且数据少的时候就是对得上的

1 个赞

你的意思是fld_cancel=1的结果是对的,<>1是不对的?

如果过滤的数据量少的话是没有问题的。如果数据量多有问题。

我感觉是个bug。

https://docs.pingcap.com/zh/tidb/stable/sql-plan-replayer#使用-plan-replayer-保存和恢复集群现场信息

收集执行现场,去github提个issue看看。

好的。我试试 ,感谢。

:thinking:有做过备份还原么?跟我们之前向非空库还原的情况很相似。
还有一种情况是需要做admin check
https://docs.pingcap.com/zh/tidb/stable/sql-statement-admin-check-table-index#admin-check-tableindex

1 个赞

说不定建个新的表结构,把数据copy 过来就好了 :melting_face: :melting_face: :melting_face:

:thinking:如果索引和表不一致,不知道insert select的结果是不是正确的。

admin check 校验一下表和索引看看呢
https://docs.pingcap.com/zh/tidb/stable/sql-statement-admin-check-table-index#admin-check-tableindex

你用join 关联试试 看看效果