问题描述:
假设现在有一张学生表STUDENT,我们想根据字段所在班级CLASS排序后分页查询,size为10,那么查询第一页的sql通过mybatis生成为:
SELECT
*
FROM
STUDENT
ORDER BY
CLASS ASC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
但是一班的学生超过10人,在查询第二页时可能查出在第一页已经查询出的数据。
问题原因:
oracle的排序基于快速排序算法,因此当有非唯一值的字段存在时,每次通过快排排序的数据是不稳定的。
解决方法:
在ORDER BY目标字段后,加入唯一字段如id等,使得每次排序完的数据一致。