tidb sql查询数据不正确,条件不过滤。

你上面那条是order by id 下面没有带order by

结果值如下

正确的值如下

不太明白,下面那条数据 都id=271535 了 为什么还要order by 呢?我们需要验证的是 为什么两条sql查询的值不一样,这个是否是bug,还是用法问题。

select id,next_check_time,request_status From temp_order_job WHERE request_status = 1 AND next_check_time<1664360160 and id=271535;
这样查一下看看呢?
这tidb里不会有两个数据库都有这个表吧?我看上面两条SQL没指定表的数据库名…

3月份使用过br迁移到这个库的,当时迁移的时候是目标是新集群,没有任何业务数据。

我指定库查询的 而且集群只有这一个表…

查不出的 因为id 271535 这个数据正确的值是request_status =2

select count() from (select id,next_check_time,request_status From temp_order_job WHERE request_status = 1 AND next_check_time<1664360160 order by id limit 50);
select count(
) from (select id,next_check_time,request_status From temp_order_job WHERE request_status = 1 AND next_check_time<1664360160);
select count(*) from (select id,next_check_time,request_status From temp_order_job WHERE request_status = 1 AND next_check_time<1664360160 order by id );
看看查询结果,哪个有问题?

结果如下

select * from (select id,next_check_time,request_status From temp_order_job WHERE request_status = 1 AND next_check_time<1664360160 order by id ) t where t.id=271535;
这个有结果吗?
要是没有结果,看着就是limit和order by一起使用的问题…
select * from (select * from (select id,next_check_time,request_status From temp_order_job WHERE request_status = 1 AND next_check_time<1664360160 order by id ) t limit 50) tt where tt.id=271535;
–可以再考虑下,下面的SQL需要执行看看不?limit调整到查询出所有数据。。。
select * from (select * from (select id,next_check_time,request_status From temp_order_job WHERE request_status = 1 AND next_check_time<1664360160 order by id ) t limit 37000) tt where tt.id=271535;

第一条没有结果的,应该是order by 和 limit一起的问题

第二条和第三条的结果一样

单独执行第一条sql里面的子查询 会查出271535这条数据:sweat:。

那在这个结果里找找有没有271535?

看看两个sql的执行计划呢,感觉像是你第一个sql走的呢个索引数据不准确

1 个赞

已经处理完 request_status 和 next_check_time 是组合索引,目前确定原因是索引键值不匹配。拆开索引重新创建了 解决了。

1 个赞

这个可以去查下看看bug列表里有没有,的找下是怎么出现的,要不有的就是出问题了都发现不了

加个单引号试试

看着没啥, 仔细操作还是有细节问题 谢谢大佬 , 学习下哈

哈哈哈,,逼疯一众大佬,不过要是查询不准确这倒是很影响业务啊