后端分页查询总结

本文总结了后端分页查询的三种常见方式:客户端分页、数据库分页和后端分页。客户端分页减少交互次数但增加初次负荷;数据库分页减轻单次交互负荷但增加并发;后端分页在两者间取得平衡,但涉及数据缓存和同步问题。文章通过JS实现的伪分页、分批显示和基于MySQL的服务端分页,详细阐述了各种方法的优缺点及适用场景。

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

分页查询可通过不同方式去进行,下面简单做了一下比较:

  1. 客户端分页 
    • 优点:减少了客户端和服务器交互的次数,客户端进行数据缓存,提高了系统交互性。
    • 缺点:增加了第一次交互的负荷
  2. 数据库分页 
    • 优点:每次从数据库返回较少数据,当次交互的负荷较轻。
    • 缺点:每次切页时都访问数据库,增加了数据库访问并发性。
  3. 后端分页(介于1、2之间)

    • 优点:在1、2之间达到了平衡,既减少了数据库并发又使服务器和客户端交互的当次负荷较小
    • 缺点:需要考虑数据缓存、数据同步等问题,增加了系统复杂性

其一:纯JS实现分页。

        一次性查询记录并加载到html的table中。然后通过选择性地显示某些行来达到分页显示的目的。这是一种伪分页,障眼法而已。只能用于数据少的情况下。一旦数据多了,十几万条数据加载到html中会变得很慢。而且不实时,一次加载完后数据就写死在页面了,若数据库中有变化,浏览器端显示的仍是上次加载过来的数据。

其二:一次查询,分批显示。

     就是说,我们可以执行一个数据库查询操作,得到结果集rs。然后,通过指针的移动来显示当前页面的记录。这样,就可以以   rs.absolute(当前页面号*每页记录数)定位到当前页的第一条记录,然后通过while循环显示n条记录(n为每页显示记录数)。在跳页时,只需修改currentPage,即可在重定位到下一页时把当前页面号改掉,重新定位记录指针,通过while遍历显示n条记录。与JS选择性显示不同,这里是选择性遍历。与JS分页不同的是,这里分页每次跳页修改的是遍历的指针,每次跳页都要进行一次全面查询。同样地,不适合大数据量查询。这里比JS分页优化的地方在于——实时性。每次跳页都会查询一次数据库,保证数据的实时性。

其三:在服务端分页。

        跳到第n页才查询、显示第n页内容。要点就是根据客户端表格的“页面”计算出数据库要查询的当前页面的第一条记录的位置。优点:实时性:跳页才查询。数据量小:只加载当前页的记录进行显示。

   重点在于两条语句:select count(*) from ...:查询得到记录总条数

   select * from .. limit pageNo,rowsCount:查询从第pageNo条开始的rowsCount条数据。


下面是mysql的一种实现:

 public List<PageMerge> getPersonalComment(long userId,Integer pageSize,Integer pageNum){
        Integer  pageNo = (pageNum - 1) * pageSize;
        return jdbcTemplate.query("SELECT * from pageMerge WHERE user_id = :userId ORDER BY created_at ASC LIMIT " + pageNo +":pageSize",
                new MapSqlParameterSource(FIELD_NAME_USER_ID,userId).addValue("pageSize",pageSize).addValue("pageNum",pageNum),rowMapper);
    }

后端service层:传过来currentPage后,去查询第curpage-1页的内容,查询少,显示少,这才是优势

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值