Oracle 和 MySQL 中的分页查询实现

7 篇文章 0 订阅
6 篇文章 0 订阅

Oracle 和 MySQL 中的分页查询实现

Oracle 实现分页查询

  • Oracle 中有一个伪劣rownum,我们通过rownum来实现分页查询
  • 一般来说,分页查询上送两个参数,currentPageNo-当前页码,pageSize-每页显示的条数
  • 我们需要返回 totalSize-总条数,totalPages-总页数,及当前页的数据明细

查询总条数使用如下的脚本

select count(*) as total from david.TB_ORDER_INFO

计算总页数


			// 这里进行取余数运算,如果能整除没有余数,则取整除的结果;不能整除则取整加1
			if ((totalSize % pageSize) == 0) {
				totalPages = totalSize / pageSize;// 能整除则取整
			} else {
				totalPages = totalSize / pageSize + 1;// 不能整除则取整+1
			}
			result.setTotalPages(totalPages);// 总页数

			// 这里处理当前页码,这里为了防止当前页大于总页数的情况,重新赋值
			currentPageNo = currentPageNo > totalPages ? totalPages
					: currentPageNo;

查询明细信息

-- 这里使用三层嵌套查询来实现分页,rownum的值下标从1开始
select * from (select rownum rn,tb.* from(select * from david.TB_ORDER_INFO) tb where rownum<=?) where rn>=?

说明:

  • 在Oracle中,我们上述的脚本显示的前后包含,且下标是从1开始的
  • 举例来说,
    • 第一页的内容为:1-10
    • 第二页的内容为:11-20
    • 第三页的内容为:21-30

计算公式为:

# 计算边界值
起始值=(当前页码-1) * 每页的条数 + 1  # 逻辑为:上一页的最后一个下标+1 为本页的起始值
结束值=起始值+每页的条数-1  # 起始值加上每页的条数-1为本页的最后一条数据下标

实现代码:


// 计算边界中的值,起始值和结束值
int begin = (currentPageNo - 1) * pageSize + 1; // 起始值=当前页码减去1乘以每页的条数再加1
int end = begin + pageSize - 1;// 结束值为起始值加上每页的条数再减一

MySQL 实现分页查询

  • mysql中使用limit关键字来实现分页查询
  • limit的语法为:limit m,n
  • 其中m为下标,n为长度;在mysql中下标从0开始

查询总条数:

查询总条数和Oracle的方法一致

计算总页数:

计算总页数的方法和Oracle一致

进行分页查询

// 计算起始值,起始值=(当前页-1) * 每页显示的条数
(currentPageNo-1) * pageSize

说明:

  • limit m,n的这种写法,当数据量比较大的时候,就容易出现效率的问题,因此数据量小的时候,可以用这种方法,当数据量上百万之后,则不能再使用,会严重的影响效率
  • 数据量大了之后,我们建议采用join关键字,并且要用到数据库的索引列
  • 比如我们的订单信息表,我们这里使用order_id作为我们的索引列,来实现快速的分页查询
-- 数据量小的时候使用该查询语句
select * from tb_order_info limit 690000,10;

-- 数据量大的时候,使用join进行分页查询
select tb_a.* from tb_order_info tb_a join (select order_id from tb_order_info limit 690000,10) tb_b on tb_a.order_id=tb_b.order_id;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack_David

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值