执行含子查询的limit不能返回正确的结果

8.5.1版本 有子查询和limit 的执行结果有问题:SELECT
*
FROM
(
SELECT
(
SELECT
name
FROM
admin_universal_data_dictionary
WHERE
u.gender_id = id
) AS GenderName,
u.id AS ID
FROM
sys_pm_user u
) MergeTable
LIMIT
40, 20 语句如下,在8.5.1版本下是查询不出数据,通过和其他版本的执行计划对比如下:
v8.5.1


v8.1.0

这种情况怎么解决?

1 个赞

程序中很多子查询,在不修改sql语句的情况下 如何解决

试一下禁止topN下推,
INSERT INTO mysql.opt_rule_blacklist VALUES(‘topn_push_down’);
ADMIN reload opt_rule_blacklist;
不过这个可能会对性能有点影响

看了下8.5.2已经修复了,可以的话,也可以升级集群到8.5.2

8.5.2是不是还没发布?

发布了啊,我刚才都部署测试了

相关的 bug:

planner: remove duplicate offset when push down pure limit down across outer join by winoros · Pull

在 v8.5.2 的时候已经修复~