chenjg
#1
select
a.id,
b.,
c.
from (
select aa.id
from aa
order by aa.time desc
limit 0, 10
) a
left join b on b.id = a.id
left join c on c.id = a.id
a与b和c都是一对多的情况
这种情况下MySQL出来的结果集会正常按照驱动表的aa.time desc顺序排序;
似乎OB会根据关联其他表后就乱序了,如果结果集不会根据驱动表正常排序,是否有数据库配置参数可以令其正常排序?
淇铭
#3
ob的版本 mysql的版本 发一下
原因有可能order by 的字段值不唯一,order by 后面加个主键 id 再看看,但是mysql排序是一致的 尽量分别截图看看
chenjg
#4
版本:V4.2.5.6
子查询内部的 order by 后面新增主键id也会有问题,order by的字段是时间戳类型字段基本不会出现重复,应该不是字段值不唯一问题,单独查询子查询的sql里内部顺序也是正常的。
是不是下面这个原因,因为是ob集群分布式环境,导致子查询的结果到上层查询后排序就不可预估了?

实际上外层加上order by就正常了
淇铭
#5
这个一点 是因为排序的列不是主键或者是索引列造成的 我记得应该是传统的数据 是相通的 看着这个解释就是因为这个原因
chenjg
#6
除了这个问题,还有其他地方有乱序问题,我看到过说MySQL默认会加order by 主键id,迁移到ob难道只能手动改代码加上去才能保持顺序吗?
淇铭
#7
应该就是这个原因 ob这里应该不会加上主键的
mysql不是加了主键排序,而是跟执行引擎有关的,mysql的行为就只能是以驱动表的序计算、输出
ob算子更多,会打乱驱动表的序