暂无图片
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


请输入正文
提交
相关推荐
postgresql如何让执行计划不变
回答 1
已采纳
可以参考这篇文档:https://www.modb.pro/db/609428
postgresql升级后只能重装所有插件吗?
回答 1
是的
pg中的autovacuum_freeze_max_age,如何正确理解??
回答 1
主要用途是调低触发freeze,预防不能进行事务号的“环绕”,也就是解决事务回卷问题。比如pg13之前,insertonly表就可能会产生。
postgresql逻辑读
回答 1
关注pgstatiousertables,它显示对象在数据块级别的统计信息。
pg中会话参数和全局参数 ,类似mysql那种session ---global
回答 1
看看这个https://blog.csdn.net/qq35462323/article/details/104769640
PG目前支持表压缩功能吗?
回答 1
暂不支持。
postgresql 如何做db双活?
回答 1
pg集群
postgreSQL 分区表 默认放到DEFAULT,怎么查DEFAULT的数据?
回答 1
直接查询父表,where带上分区键,执行计划会直接打到子表上
PostgreSQL两个节点如何做高可用? patroni+etcd必须奇数节点
回答 3
已采纳
奇数节点是因为要做投票选举,比如使用raft算法,pg或者其他关系数据库高可用主要是基于共享存储或者日志顺序应用,算法不一样,要求也不一样
如何解除postgresql的主从关系
回答 6
已采纳
你加粗的两个进程1.这个postgres:logicalreplicationlauncher进程是逻辑复制使用的,在发布实例和订阅实例都存在。主要的作用就是启动逻辑复制工作进程,如果你原来主备是流复