db2分页技术优化问题:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了db2分页技术优化问题:相关的知识,希望对你有一定的参考价值。

在SQL语句后面加入了 " order by aa asc fetch first 20 rows only " 取0-20的数据 当取第一页的时候会显示20条数据,但是当点击下一页的时候(20-40)数据就为空了,其实是有数据的。可能跟 fetch first 20 有关,但是必须得加上这句话,请问各位大侠有没有什么解决办法啊。

fetch first 20  rows only 是提取前20条数据的不能作为分页来使用。

分页有三种:

1、 如果一定要使用fetch first  20  rows only  的方式,可以使用WITH AS 方式实现:

-------------------------------------------------

WITH TMP AS(

select * from (

select *,rownumber() over(order by id asc ) as row_id from table_name

)  where  row_id > (pagenumber-1)*pagesize

)

SELECT TMP.* FROM TMP WHERE   fetch first  pagesize  rows only

-------------------------------------------------

2、比较常见的SQL分页,可以使用沈阳java网友的写法:

-----------------------------------------------------

select * from (

select *,rownumber() over(order by id asc ) as rowid from table_name

)as a

where a.rowid >= (pagenumber-1)*pagesize+1  AND a.rowid <= pagenumber*pagesize

-------------------------------------------------------

3、使用PageHelper分页插件,也可以实现自动分页:

使用方法

--------------------------------------------------------------

a.引配置

<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">

</plugins>

-------------------------------------------------------------

b.使用:

LogInfoQuery example = new LogInfoQuery();

example.setOrderByClause(" id desc ");

Criteria criteria = example.createCriteria();

if(null != logInfo.getStartTimeQuery() && null != logInfo.getEndTimeQuery()) 

criteria.andOpTimeBetween(logInfo.getStartTimeQuery(), logInfo.getEndTimeQuery());


PageHelper.startPage(page.getPageNo(), page.getPageSize());

List<LogInfo> result = logInfoMapper.selectByExample(example);

PageInfo<LogInfo> pageInfo = new PageInfo<>(result);

return pageInfo;

-------------------------------------------

使用示例结束。

如果不懂可以追问。

参考技术A select * from (select 字段1,字段2,字段3,字段4,字段5,rownumber() over(order by 排序字段 asc ) as rowid from 表名 )as a where a.rowid >= startPage AND a.rowid <endPage本回答被提问者采纳 参考技术B 和 fetch first 20 rows only 没有关系

MySQL大数据量分页查询方法及其优化

参考技术A 使用子查询优化大数据量分页查询

这种方式的做法是先定位偏移位置的id,然后再往后查询,适用于id递增的情况。

使用id限定优化大数据量分页查询
使用这种方式需要先假设数据表的id是连续递增的,我们根据查询的页数和查询的记录数可以算出查询的id的范围,可以使用 id between and 来查询:

当然了,也可以使用in的方式来进行查询,这种方式经常用在多表关联的情况下,使用其他表查询的id集合来进行查询:

但是使用这种in查询方式的时候要注意的是,某些MySQL版本并不支持在in子句中使用limit子句。

参考 sql优化之大数据量分页查询(mysql) - yanggb - 博客园 (cnblogs.com)

以上是关于db2分页技术优化问题:的主要内容,如果未能解决你的问题,请参考以下文章

Service层有多个查询,若依分页失灵?教你如何解决!

Mysql分页优化(100000条数据以上的查询),求指点~方法~ 有例子更好,网上的没看懂~

C端列表分页查询优化思路

基于Android官方AsyncListUtil优化改进RecyclerView分页加载机制

ORACLE分页查询SQL语句

mysql使用limit分页优化方案