暂无图片
pg中给个高效分页的例子?
我来答
分享
暂无图片 匿名用户
pg中给个高效分页的例子?

pg中给个高效分页的例子

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
shunwahⓂ️

PostgreSQL、MySQL高效分页方法

对于数据库相关的业务,逃不过的数据分页场景,无论是前台分页浏览还是页面底部自动加载。对于分页需求,各数据库也提供了成熟的SQL支持,类似于Hibernate等ORM框架也集成了相关的方法。但是基于数据库(框架)提供的分页方法,我们能否结合业务,提供更高效更优化的分页方法呢?

基础分页技术

数据查询语句中,和分页相关的有两个参数,分别是:

  • Limit:查询数据条数
  • OFFSET:查询结果数据起始位置偏移量(跳过的行数)

PostgreSQL的语法为:

SELECT fields_list FROM table_name [ ORDER BY ... ]
[ LIMIT {number | ALL} ] [ OFFSET number];
复制

注:LIMIT和OFFSET都是可选字段。

下文以第二种兼容的语法来进行描述。
订单表表名:orders,每页显示条数:10 page_sieze
查询第一页:

SELECT * FROM orders ORDER BY order_id
LIMIT 10 OFFSET 0;
复制

查询第二页:

SELECT * FROM orders ORDER BY order_id
LIMIT 10 OFFSET 10;
复制

查询第n页:

SELECT * FROM orders ORDER BY order_id
LIMIT page_sieze OFFSET page_sieze * n;
复制

分页优化

如果熟悉Openstack API的开发人员会注意到,Openstack原生API采用了特殊的分页方式:以nova list的API为例,如果request中包含 limit 字段,则API认为要以分页模式查询结果,官方API对limit字段的说明如下:


Nova List API

Requests a page size of items. Returns a number of items up to a limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request.

以上描述中的关键信息是:如果分页查询,返回的JSON格式中会包含marker字段,指示下一页数据第一条数据的ID。另外这个API也存在一个限制,就是分页时,只能浏览上一页/下一页,而不能跳页。

暂无图片 评论
暂无图片 有用 0
打赏 0
2022-11-10
手机用户9375
2022-11-11
第n页,是OFFSET page_sieze * (n-1) 吧 ??
回答交流
Markdown


请输入正文
提交
相关推荐
aix下生成的core文件和linux下生成的core文件,如何分析
回答 1
IBM有个小专题DEBUGGINGCOREFILES,有兴趣的话可以看看DEBUGGINGCOREFILES[01]WHATISACOREFILE?https://www.ibm.com/suppor
postgresql 中的record能加字段吗?
回答 1
RECORD不是真正的数据类型,只是一个占位符。
Plsql 12和14有没有类似的CNplugin插件?
回答 1
已采纳
CNplugin插件应该是通用的吧貌似好久没更新了下载地址:https://www.modb.pro/download/167437
postgresql 9.4的版本,低不低?
回答 1
已采纳
官方最新14了,您说呢。就算不用14,正式环境至少13吧。难道将来打算升级吗?或者就是这个版本一直用下去?
关于流复制的startup进程和walreceiver进程
回答 1
PostgreSQL物理流复制中,备库回放由startup进程负责,而非walreceiver进程。1.walreceiver进程:从主库接收WAL数据,通过流复制协议与主库walsender连接,在
restart_lsn为什么不是实时的在变化,而是间隔5到10秒刷新一下
回答 2
稍微补充下Q1中的estartlsn可以看下walwriterdelay这个是怎么设置的,默认是200ms
一个SQL加了一个无关紧要的条件后,执行计划改变,执行时间增加上百倍,请高手帮忙看看
回答 3
你走主键索引的话,查询相关数据后,还需要回表把其他字段查询出来。
postgreSQL 12为什么没自动清理wal日志?已经自动归档了,但是wal日志没自动删除
回答 1
已采纳
WAL文件积压大多数情况都与复制槽有关,请检查所有database下的复制槽,是否有不使用的。另外就是空闲长事务、两阶段提交事务也会引起。
repmgr5.1 正常切换告警,不知道是啥问题,求各位大佬看看
回答 2
切换过程成功停止了当前主节点并将备用节点提升为主节点。但是,由于未提供密码而无法连接到数据库,因此在新主节点的检查点阶段发生错误。与重新加入目标节点的复制连接也失败,系统正在等待之前的主节点重新连接到
postgresql 写函数存储过程,边写边调试,需要先运行sql, 然后刷新函数 找到以后在调试 这样太慢了,有什么好的方法吗?
回答 1
写代码也一样,有时候编译的过程不可避免,如果是比较复杂的函数,可以分割成小的函数,确保每一步的结果符合预期,减少编译时间