left join连表查询count操作时,有无order by 性能差距很大

我的版本是5.7.25-TiDB-v7.1.1,rrs_person.id 是主键。
没有order by 查询左边和右表, 有order by 只查询左表。可能tidb团队偷摸的修复了这个bug :innocent:

不同版本的数据库一般执行计划都不完全一样,而且结果对了也不算bug不一定会写出来

这个应该是不能禁止left 右边的表扫描,只是这个SQL语句逻辑上不需要右边的表

他的语句是SELECT count 表关联是left join 而且where条件只有左边的表,所以左边满足条件+右边满足条件算一条;左边满足条件右边不满足也算一条,就是说不管右边满不满足条件,只要左边满足就算,所以理论上是不需要查询右边的表的。

右边关联的条件必须唯一,要不然就不对了

没有想明白为什么有差异,等待大神来揭迷

是BUG,参考:https://github.com/pingcap/tidb/issues/46248

1 个赞

那如何给v7.1 版本打补丁, 只能升级版本吗?

打补丁可以参考这里,但是一般不建议打补丁,建议直接升级版本。
https://docs.pingcap.com/zh/tidb/stable/maintain-tidb-using-tiup#hotfix-版本替换
https://docs.pingcap.com/zh/tidb/stable/tiup-component-cluster-patch#tiup-cluster-patch

1 个赞

你说的没错,是需要右边关联表的字段唯一才能保证可以不扫,习惯于看到id就认为是主键这个是有问题的,还是得核实一下

看这个issue对应的PR只合并到了主干版本,7.1应该是不能通过打补丁升级解决的。需要升级大版本。
如果短期不能升级大版本,先尝试其它方式绕过下吧。

1 个赞

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。