[数据库/PostgreSQL] 真的没有完美的分页方法吗?

2022-03-14 13:26:03 +08:00
 kaifeiji
因为性能原因,研究了很多分页 SQL 的实现:

1 、limit-offset 的耗时线性增长;
2 、keyset 不能跳转指定页;
3 、xmin 基于事务,可能有“空洞”;
4 、ctid 基于存储,不能用 where 条件过滤;
5 、pg_stats 基于统计数据,实时性差,结果不精确。

具体可参考这篇文章:

https://kaifeiji.cc/post/do-i-really-know-about-pagination/

我想问的是,有没有:

1 、耗时固定
2 、能跳转指定页
3 、没有“空洞”
4 、能用 where 条件过滤
5 、实时性、结果精确

的分页方法?
6141 次点击
所在节点    PostgreSQL
41 条回复
nolo
2022-03-14 13:34:57 +08:00
bitmap 索引试试?
wd
2022-03-14 13:48:59 +08:00
直接看最后,这文章是搞笑的...
cslive
2022-03-14 13:53:27 +08:00
同楼上,拉到最后看完你文章有惊喜
kaifeiji
2022-03-14 13:56:02 +08:00
@nolo 开启 bitmap 扫描,直接这样?

set enable_bitmapscan =off;
dzdh
2022-03-14 14:04:14 +08:00
没有。这不是 Pgsql 的问题。所有 SQL 数据库都存在分页到后面越来越慢问题。

海量数据查询、排序、分页。请直接上搜索引擎。
3dwelcome
2022-03-14 14:18:34 +08:00
我竟然信了。。一直看到了文章最后,差点晕过去。

话说大数据分页始终是个比较麻烦的问题,不同排序和字段过滤,会导致完全不同的分页结果,连缓存都不太好做。
luckyrayyy
2022-03-14 14:28:45 +08:00
哈哈哈哈笑死
kaifeiji
2022-03-14 14:40:00 +08:00
@dzdh 那我可以死心了
oneisall8955
2022-03-14 15:19:33 +08:00
最终,发现问题的根源是索引损坏,导致分页时排序太慢。。。。。。。。。
hidemyself
2022-03-14 15:20:36 +08:00
答案是没有,要么上 ES 这种
Vegetable
2022-03-14 15:26:25 +08:00
根据我对很多“大厂”项目的观察,真的没有完美的分页方案。
leoskey
2022-03-14 15:27:12 +08:00
上 ES 后又发生新的问题🐕 https://www.v2ex.com/t/840193
sfqtsh
2022-03-14 15:39:44 +08:00
用游标呢
kaifeiji
2022-03-14 15:43:32 +08:00
@sfqtsh 游标和 keyset 类似,都不能跳指定页
sfqtsh
2022-03-14 15:53:04 +08:00
@kaifeiji 可以 MOVE absolute
hope4tomorrow
2022-03-14 16:00:58 +08:00
用 mysql 也出过类似的问题,ID 主键索引不连续了,200w 数据分页一次要 2s ,在 leader 指导下直接对 ID 建索引,再分页查询立马起作用🥱
MoYi123
2022-03-14 16:17:26 +08:00
@hope4tomorrow 不是很懂, 为什么要给主键再建一次索引?
westoy
2022-03-14 16:23:45 +08:00
淘系你订单多的话, 中间也慢的, 而且经常会排序出错, 缓存上半天不变

京东我怀疑会定时腾冷热数据, 它家是真的存在不定时丢单的

这两家我估计已经接近消费领域性能和误差折中的天花板了
kaifeiji
2022-03-14 16:38:55 +08:00
@sfqtsh 个人理解,MOVE 同样是要一个一个数 offset 的。有更多的线索吗?
so1n
2022-03-14 16:40:14 +08:00
数据库本身就不擅长做分页的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/840205

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX