扫码关注官方订阅号
如题,我前两天去参加 MongoDB 用户组交流会时,听讲师说到数据量大的话不要使用 skip 和 limit 因为,这样会一行一行的数到想到的页数再取 PageSize 的数量。当然他们也提了另外一个方法,但是只略讲了一句。
我在这里提问是想知道具体怎么做?求思路。
业精于勤,荒于嬉;行成于思,毁于随。
如果你是想取“下一页”或者“上一页”,可以通过查询大于某个_id的sort+limit来实现。 如果你是想取“第xxx页”,如果想要完全精确,其实没有多好的办法,分页本身是“挨个数”的逻辑,有没有索引都避免不了这个耗时的过程。 在分页数非常大的情况下,排在几千万之后的数字并没有多少人关心,你可以使用redis做页数对_id列表的缓存,每隔一段时间更新一次。 这个问题的根本点在于:“索引所依赖的b+结构不能用于排名计算”。
记录上次查询的最后一个_id, 下次查询{_id: {$gt: last_id}}
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
如果你是想取“下一页”或者“上一页”,可以通过查询大于某个_id的sort+limit来实现。
如果你是想取“第xxx页”,如果想要完全精确,其实没有多好的办法,分页本身是“挨个数”的逻辑,有没有索引都避免不了这个耗时的过程。
在分页数非常大的情况下,排在几千万之后的数字并没有多少人关心,你可以使用redis做页数对_id列表的缓存,每隔一段时间更新一次。
这个问题的根本点在于:“索引所依赖的b+结构不能用于排名计算”。
记录上次查询的最后一个_id, 下次查询{_id: {$gt: last_id}}