同事遇到一个奇怪的问题,在使用下面分页导记录时发现分页后的记录跟总的记录数匹配(总的记录数大概25000),但是有些记录不存在,有些重复:
SELECT *
FROM (SELECT row_.*, rownum rn
FROM (select --省略几百行
order by sdate, mname, blevel asc) row_
WHERE rownum <= 10000)
WHERE RN > 0
SELECT *
FROM (SELECT row_.*, rownum rn
FROM (select --省略几百行
order by sdate, mname, blevel asc) row_
WHERE rownum <= 20000)
WHERE RN > 10000
SELECT *
FROM (SELECT row_.*, rownum rn
FROM (select --省略几百行
order by sdate, mname, blevel asc) row_
WHERE rownum <= 30000)
WHERE RN > 20000
可能原因:
1 分页1--10000,10001--20000,20000--30000的sql执行计划不同,造成结果集记录的顺序不同(这个也许有可能,没有验证过)。
2 排序算法(原来的3个字段(sdate, mname, blevel)不能保证唯一性)
能解释的现象:
1 总的记录数是一样的:因为总的记录数是不变的,不管记录的顺序怎么变,3段加起来的和是相等的
2 3段记