百万数据分页技术

本文探讨了在处理百万级别的数据库查询时,如何通过优化查询方式、利用特定的索引设置、数据分区功能及分析函数row_number来显著提高分页跳转速度。包括使用hibernate中的oracle分页查询、基于主键聚集索引的快速分页、通过分析函数row_number提升性能等方法,以及在不同场景下考虑是否必要为客户提供全部数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用java程序查询1百万的数据库,如何加快分页跳转的速度?

一般有常用几种基本的方法可以借鉴:

第一:

hibernate中的oracle分页查询原代码:
StringBuffer pagingSelect = new StringBuffer(100);
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
pagingSelect.append(sql);
pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > ?");

其实就是
select * from ( select row_.*, rownum rownum_ from ( 你的查询语句 )
row_ where rownum <= 结束行) where rownum_ > 开始行

 

第二:

这个要看 用哪个字段排序了,如果按照ID之类的,即是主键聚集索引,下面这个思想的分页很快,百万级别,分到后面100W条左右600毫秒,解决千万级别估计没啥 问题。

先取出第N条的ID,例如 select top 1000000 @ID = ID;
上句将占99%的查询成本。
然 后select top 10 * where ID >前面取出的ID即可

第三:

1. 总共只需要一个查询总页数: select count(proid) from sys.tblproduct,而不是每翻页就去查询一次

2. SQL语句中只需要一次排序就可以了,不需要多次排序
select productname,proid,addtime,prodetail from
(select productname,proid,addtime,prodetail, rownum as rid
from (select productname,proid,addtime,prodetail from sys.tblproduct order by proid)
where rownum <= &intPage * &intPageSize
) where rid >= (&intPage-1) * &intPageSize+1

第四:

采用orcale的数据分区功能,分区后速度提升很明显。
另外一个关键是要合理的索引设置
硬件的配置也要跟上

第 五:

用分析函数row_number(order by XX)会比较快,比rownum的性能好一些
hibernate不用的 主要原因,我猜测是解析起来有点麻烦,必须在查询语句中间插一句,容易错。

问题的另一个关键是,有必要在任何条件下给客户看全部数据么? 客户关心么?
和客户交流,看他们能接受什么样的默认的查询条件限制,这来得实际多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值