最近在一个应用中,发现报表分页后丢失记录,但是记录总数是一样的。经过仔细检查SQL确认语句正确,而且如果不分页的话出来的数据就是正确的。怀疑Oracle的order by 算法是不稳定排序算法。
经过测试,发现确实如此。如果排序的列存在大量相同记录,而且没有索引的话,每次执行相同语句得到的记录排序是不确定的(其实Oracle相关文档里面有提及)。
在排序中增加主键或者rowid,问题解决。
经过测试,发现确实如此。如果排序的列存在大量相同记录,而且没有索引的话,每次执行相同语句得到的记录排序是不确定的(其实Oracle相关文档里面有提及)。
在排序中增加主键或者rowid,问题解决。
本文探讨了Oracle数据库中遇到的一个报表分页后记录丢失的问题。经过分析发现,原因是orderby操作在存在大量相同记录且未建立索引的情况下导致排序不稳定。通过在排序字段中加入主键或rowid解决了该问题。
248

被折叠的 条评论
为什么被折叠?



