比db.inventory.find().limit(10)快吗db.inventory.find()?
我在 mongodb 中有数百万条记录,我想获取某些订单中的前 10 条记录。
使用limit()您通知服务器您不会检索超过k 个文档。允许进行一些优化以减少带宽消耗并加快排序速度。最后,使用限制子句,服务器将能够在 RAM 中排序时更好地使用可用的最大 32MB(即:当无法从索引获取排序顺序时)。
现在,长话短说:find()返回一个光标。默认情况下,游标会将结果批量传输到客户端。从文档中,:
对于大多数查询,第一批返回 101 个文档或刚好足以超过 1 MB 的文档。后续批量大小为 4 MB。
使用limit()游标不需要检索不必要的文档。从而减少带宽消耗和延迟。
请注意,根据您的用例,您可能也会使用sort()操作。来自与上面相同的文档:
对于包含没有索引的排序操作的查询,服务器必须加载内存中的所有文档以在返回任何结果之前执行排序。
sort () 文档页面进一步解释:
如果 MongoDB 无法通过索引扫描获得排序顺序,则 MongoDB 使用 top-k 排序算法。该算法缓冲底层索引或集合访问迄今为止看到的前 k 个结果(或最后一个,取决于排序顺序)。如果在任何时候这 k 个结果的内存占用超过 32 MB,则查询将失败1。
1 32 MB 限制并非特定于使用limit()子句进行排序。任何无法从索引获取顺序的排序都会受到相同的限制。然而,使用普通排序,服务器需要将所有文档保存在内存中才能对它们进行排序。在有限排序的情况下,它只需同时在内存中存储k 个文档。
| 归档时间: |
|
| 查看次数: |
3299 次 |
| 最近记录: |