【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】v7.5.0
【复现路径】一个子查询使用order by语法,子查询中分别加limit和不加limit语法
【遇到的问题:问题现象及影响】
子查询带有limit语法的,子查询的order by会生效,不带limit语法的,order by被优化器优化掉了
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
子查询带limit子句的:
子查询不带limit子句的:
aleric_w
(Aleirc.w)
2
表id应该是主键索引吧? 是的话,这里就可以解释的通,limit结果集有一次排序,虽然数据是有序的;没有limit ,order by id 实际就是全表扫描,本身就是有序的,order by 估计是被优化了
问题是,如果在最外层查询加上limit offset,这时子查询的order by已经被优化掉了,就会导致每次返回的数据不一致
WalterWj
(王军 - PingCAP)
8
1 个赞
能了解下,为什么默认子查询要移除order by吗?
我们的场景是,使用一个分布式查询框架,框架会自动计算limit offset值,套在我们提供的查询外面
小龙虾爱大龙虾
(Minghao Ren)
10
因为从语义上讲,外层查询没有要求排序,所以移除 roder by
里面有 limit ,语义上是按 id 取前 n 条,所以不能移除 order by
ok,除了语义上的区别,性能上有什么影响吗?或者说当初添加这个参数是有其他的考虑吗?
system
(system)
关闭
13
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。