PageHelper分页操作,分页不变化的原因分析

今天进行系统测试,突然发现一个奇怪的bug,在研发环境下,进行分页处理,配合前段进行分页变化,没有问题,但是当系统发布到测试环境就出问题了,怎么整分页就是有问题,遂追踪问题根源,进行对比分析,以解决现有问题。

经过粗略分析,问题在执行的SQL上,现将SQL贴在下方:

SELECT
	* 
FROM
	(
SELECT
	TMP_PAGE.*,
	ROWNUM ROW_ID 
FROM
	(
SELECT
*
FROM
	User CR 
WHERE
	CR.IS_DELETE = 0 
ORDER BY
	CR.ORDER_NUM ASC
	) TMP_PAGE 
WHERE
	ROWNUM <= 40
	) 
WHERE
	ROW_ID > 30
	;

 从SQL中,我们发现完全没有问题,但是当我分别在两个库中执行SQL时,发现执行结果却让人尴尬,一个结果正确,一个结果错误。

错误的现象表现为:

一个切换分页的时候,是正常的数据变化,错误的呢,你会发现第一页和第二页能够切换,但是往后的话,切换后数据一直不做变化,这个现场很奇怪,我们继续分析两者的不同

发现在查询的时候,这个排序的字段,就是ORDERS_NUM有高度的重复性,就是如下:

 

 这样的话,我们查询分析oracle的排序算法,发现的order by的排序算法是不稳定的算法,如果碰见想相同值的话,就会出现分页不能够正常显示的异常,这个应该就是这个问题的根本问题

简单的解决方案有二:

1、就是将排序字段进行调换,就能够解决当前问题

2、经过网上查询发现,可以使用rowid解决现有问题,rowid 的详细解释,可以参考如下优化博文,

https://www.cnblogs.com/xqzt/p/4449184.html

https://blog.csdn.net/qq_40687433/article/details/78466488

解决问题的方法千千万,但是有时候我感觉,最简单解决问题的方法就是最好的,当然有多个方法,我们还是要了解的,在必要的时候说不定,还能够帮我们大忙呢。

希望大家多多支持,多多关注点赞,一起交流进步!

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值