诡异,OB的Limit分页不对呢
环境:
MySQL 5.7.25-OceanBase-v4.2.5.4
同一个SQL,在原生MySQL和OB表现不同
问题SQL:
select * from (
select id,name,code from user order by code
) a where name='123' limit 0,10
第1页(0,10)出现的某条数据
竟然又在第2页(10,10)出现了!
在纯MySQL没问题,切到OB就见鬼
- OB的排序稳定性问题?
- Limit分页实现机制不同?
- 还是这个版本的特有bug?
有没有老司机遇到过类似问题?
这是feature还是bug啊?
临时解决方案有哪些?
来轩
#3
OB如果想要分页查询数据不重复需要排序字段是唯一的,不然会出现你说的问题
1 个赞
菜鸟收割机
#5
不保证有序的原因是OB按索引扫的,而MySQL保证有序是因为MySQL按主键扫的。所以你ob要保证有序就需要进行排序后limit
来轩
#6
跟什么扫描没关系,MYSQL如果排序字段非唯一会进行二次排序,但是OB只会进行一次排序,这个是行为上的区别
1 个赞
仗剑天涯
#7
针对上述问题,OceanBase 4.2.1 BP2引入了分页保序功能,只在MySQL租户下可以使用,增加隐藏配置项_preserve_order_for_pagination、查询hint PRESERVE_ORDER_FOR_PAGINATION用于控制查询是否使用分页保序功能。
可以打开下面参数看下
alter system set _preserve_order_for_pagination = 1;
1 个赞