SQL分页查询数据重复问题及解决方案
Oracle分页查询:
Oracle的分页查询是没有进行任何排序操作的,Oracle是顺序的从数据块中读取符合条件的数据返回到客户端。
而Oracle的排序算法不具有稳定性,也就是说,对于键值相等的数据,这种算法完成排序后,不保证这些键值相等的数据保持排序前的顺序。
造成分页查询数据重复出现的原因是:在数据中,排序列值的不唯一性
解决方法如下(两个条件必须同时满足):
1.sql语句中需要有排序条件。
2.排序条件如果没有唯一性,那么必须在后边跟上一个唯一性的条件,比如主键(也可以使用rowid)。
备注:oracle默认采用rowid排序方式,所以我们只要在原来的排序规则后再加上rowid排序即可,同时也不会造成额外的性能损耗。
mysql分页查询:
MySQL 使用 limit 进行分页时,可能会出现重复数据,通过加入 order by 子句可以解决,但是需要注意的是,如果排序字段有相同值的情况下,
由于排序字段数据重复,可能会导致每次查询排序后结果顺序不同,分页还是会出现重复数据,这时可以加入第二个排序字段,提高排序的唯一性,
最好保证排序的字段在表中的值是唯一的,这样就可以少写一个排序字段,增加查询效率,因为 order by 后面有多个排序字段时,无法用到索引。
备注:order by 多个字段时,用逗号分隔每一个字段,如果字段不指明排序方式,默认是增序