Mongo的skip()适用于小型集合,但是一旦你有几千条记录,它就开始变慢.
老实说,我想知道为什么NoSQL数据库中类似LIMIT的功能如此难以实现.
我一直在阅读的唯一"解决方案"是使用基于范围的查询.但对于很多不可行的解决方案.
MySQL的LIMIT
大偏移也有类似的挑战.StackOverflow的一些例子:
如何在LIMIT子句中使用大偏移量加速MySQL查询?
为什么MYSQL更高的LIMIT偏移会降低查询速度?.
具有大跳过/偏移值的限制查询的效率的基本问题是,为了使数据库查询到达可以开始返回记录的点,必须跳过大量索引条目.对于具有活动写入(插入/更新/删除)的数据库,如果不隔离查询或缓存结果,这也可能导致一些有趣的调页副作用.
基于范围的分页是一种可以利用索引的更有效的方法,但正如您所指出的,它可能不适合所有用例.如果您经常需要跳过数千条记录并发现它太昂贵,您可能需要调整数据模型,添加一些缓存或在用户界面中添加使用限制.
例如,在通过Google搜索结果进行通用术语分页时,可能会有数亿个结果.如果您一直点击页面,您最终会发现UI限制为1,000个结果(可能相当于50-100页,具体取决于过滤的结果数量).另一种流行的UI方法是Continuous Scrolling,它避免了一些常见的分页问题(尽管会产生其他可用性挑战).