分业

public class PageIndex {

    private long startindex;

    private long endindex;

    public PageIndex(long startindex, long endindex) {
        this.startindex = startindex;
        this.endindex = endindex;
    }

    public long getStartindex() {
        return startindex;
    }

    public void setStartindex(long startindex) {
        this.startindex = startindex;
    }

    public long getEndindex() {
        return endindex;
    }

    public void setEndindex(long endindex) {
        this.endindex = endindex;
    }

    public static PageIndex getPageIndex(long viewpagecount, int currenPage, long totalpage) {
        long startpage = currenPage - (viewpagecount % 2 == 0 ? viewpagecount / 2 - 1 : viewpagecount / 2);
        long endpage = currenPage + viewpagecount / 2;
        if (startpage < 1) {
            startpage = 1;
            if (totalpage >= viewpagecount) endpage = viewpagecount;
            else endpage = totalpage;
        }
        if (endpage > totalpage) {
            endpage = totalpage;
            if ((endpage - viewpagecount) > 0) startpage = endpage - viewpagecount + 1;
            else startpage = 1;
        }
        return new PageIndex(startpage, endpage);
    }

}



### 分页查询的概念 分页查询是一种用于处理大量数据的技术,通过将结果集分割成多个较小的部分来提高性能并改善用户体验。这种方式可以减少一次性加载的数据量,从而加快页面响应速度[^1]。 ### 实现方式 对于数据库中的分页操作通常依赖于SQL语句的支持,在MySQL中可以通过`LIMIT`子句配合`OFFSET`参数完成基本的分页功能;而在Oracle里则会采用ROWNUM或者更现代一点的FETCH FIRST N ROWS ONLY语法结构来进行相同的操作[^2]。 另外一种常见的做法是在应用程序层面维护一个游标(Cursor),每次请求只返回一部分记录以及下一个批次所需的信息,这样即使面对海量级别的数据也能保持较高的效率[^3]。 #### MySQL 示例代码 ```sql -- 假设每页显示10条记录, 当前处于第2页 SELECT * FROM table_name LIMIT 10 OFFSET 10; ``` #### Oracle 示例代码 ```sql -- 使用 ROWNUM 方式 (适用于较旧版本) SELECT * FROM ( SELECT a.*, ROWNUM rnum FROM (SELECT * FROM employees ORDER BY employee_id) a WHERE ROWNUM <= 20 -- 获取前20行 ) WHERE rnum >= 11; -- 只取从第11到第20行之间的部分 -- 或者使用 FETCH 子句 (支持12c及以上版本) SELECT * FROM employees ORDER BY employee_id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY; ``` ### 应用层面上的做法 除了依靠底层数据库提供的原生特性外,还可以考虑在应用逻辑内部实现更加灵活高效的分页机制。比如利用Redis这样的内存存储系统缓存热点数据片段,或是构建基于时间戳/自增ID等字段作为边界条件的服务端游标方案,这些都能有效减轻数据库的压力同时提供更好的交互体验[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值