一、问题描述
在每页20条记录是数据出现重复,每页10条时分页数据混乱,每页30,50,100,1000时分页正常
在单独一个数据库表中偶现
二、排查步骤
1.以为是数据库数据异常,直接把程序中SQL复制出来全量查询时,数据总量正常
2.以为是分页控件异常,到其他功能上查询,无异常
3.把分页大小调大到每页30条,50条,100条,1000条,数据正常
4.发现SQL中每次都追加一个排序字段
三、问题原因
oracle分页使用rownum,它跟rowid不同,他的值不是绝对的,每次查询时生成,只能用于小于或小于等于,如果排序order by的字段不是唯一的,有重复值,此时就根据数据的条数不同,分页的大小不同,就有可能发生分页混乱的情况。
这个情况只在特殊数据量和分页情况下偶现
四、建议
1.分页排序时使用唯一值
2.如果必须用有重复的值,那多增加几个排序字段,联合排序,让排序后的记录是有明确顺序的