物理分页与逻辑分页

一 概述

1.物理分页

物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,Oracle的rownum。不同数据库使用不同关键字。
程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果。

2.逻辑分页

逻辑分页依赖的是程序员编写的代码,所有数据库都统一。
数据库返回的不是分页结果,而是全部数据,然后再由程序员通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,因为List集合有序,再根据索引获取指定范围的数据。

二 对比

1.数据库负担

物理分页每次都访问数据库,对数据库造成的负担大。
逻辑分页只访问一次数据库,对数据库造成的负担小。

2.服务器负担

逻辑分页一次性将数据读取到内存,占用了较大的内容空间
物理分页每次只读取一部分数据,占用内存空间较小。

3.实时性

逻辑分页一次性将数据读取到内存,数据发生改变,数据库的最新状态不能实时反映到操作中,实时性差。

物理分页每次需要数据时都访问数据库,能够获取数据库的最新状态,实时性强。

4.适用场合

逻辑分页主要用于数据量不大、数据稳定的场合
物理分页主要用于数据量较大、更新频繁的场合

三 MyBatis中的物理分页和逻辑分页

MyBatis使用RowBounds实现的分页是逻辑分页,也就是先把数据记录全部查询出来,然在再根据offset和limit截断记录返回(数据量大的时候会造成内存溢出)。

可以用插件或其他方式能达到物理分页效果。
mybatis的物理分页插件:

常见的两种: Mybatis-Paginator Mybatis-PageHelper

为了在数据库层面上实现物理分页,又不改变原来MyBatis的函数逻辑,可以编写plugin截获MyBatis Executor的statementhandler,重写SQL来执行查询

四 结论

1.物理分页速度上并不一定快于逻辑分页,逻辑分页速度上也并不一定快于物理分页。
2.物理分页总是优于逻辑分页:没有必要将属于数据库端的压力加诸到应用端来,就算速度上存在优势,然而其它性能上的优点足以弥补这个缺点。
3.在分页工作前,有必要了解使用数据库本身的一些sql语句特点更好的分页

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值