mongodb:limit()会提高查询速度吗?

mongodb:limit()会提高查询速度吗?,mongodb,Mongodb,是否db.inventory.find().limit(10)快于db.inventory.find() 我在mongodb中有数百万条记录,我希望在某些订单中获得前10条记录。使用limit()通知服务器,您将检索不超过k个文档。允许进行一些优化以减少带宽消耗并加快排序。最后,使用limit子句,服务器将能够更好地使用在RAM中排序时可用的32MB最大值(即:当无法从索引中获得排序顺序时) 现在,说来话长:find()返回一个游标。默认情况下,光标将批量将结果传输到客户端。从,: 对于大多数

是否
db.inventory.find().limit(10)
快于
db.inventory.find()

我在mongodb中有数百万条记录,我希望在某些订单中获得前10条记录。

使用
limit()
通知服务器,您将检索不超过k个文档。允许进行一些优化以减少带宽消耗并加快排序。最后,使用limit子句,服务器将能够更好地使用在RAM中排序时可用的32MB最大值(即:当无法从索引中获得排序顺序时)


现在,说来话长:
find()
返回一个游标。默认情况下,光标将批量将结果传输到客户端。从,:

对于大多数查询,第一批返回101个文档或刚好足够超过1MB的文档。后续批处理大小为4 MB

使用
limit()。从而减少带宽消耗和延迟

请注意,考虑到您的用例,您可能还会使用
sort()
操作。根据与上述相同的文件:

对于包含没有索引的排序操作的查询,服务器必须在返回任何结果之前加载内存中的所有文档以执行排序

并进一步解释:

如果MongoDB无法通过索引扫描获得排序顺序,则MongoDB使用top-k排序算法。此算法缓冲底层索引或集合访问到目前为止看到的前k个结果(或最后一个,取决于排序顺序)。如果在任何时候,这些k结果的内存占用超过32 MB,则查询将失败1



1该32 MB限制不特定于使用
limit()
子句进行排序。任何不能从索引中获得顺序的排序都将受到相同的限制。但是,使用普通排序时,服务器需要在其内存中保存所有文档以对其进行排序。对于有限排序,它只需要同时在内存中存储k个文档。

如果您需要按顺序进行排序,那么数据库当然会首先根据标准对其进行排序,然后返回前10条记录。使用该限制只会节省网络带宽。e、 这里我按名字排序,然后给出前10条记录,它必须扫描整个数据,然后选择前10条。(正如您所注意到的,它正在进行COLLSCAN,这被理解为集合扫描,因为我没有这个示例的索引,这里要展示的想法是,它正在对所有记录进行完全扫描,对其进行排序,然后选择最上面的记录。)


Read.So
limit()
减少了带宽消耗和延迟,但没有加快查询速度?@gzc它将减少带宽消耗并加快排序查询。我对我的答案进行了编辑,以更加强调这一点,并提供了到文档中相关段落的链接。
> db.t1.find().sort({name:1}).limit(10).explain()
{
    "queryPlanner" : {
            "plannerVersion" : 1,
            "namespace" : "test.t1",
            "indexFilterSet" : false,
            "parsedQuery" : {
                    "$and" : [ ]
            },
            "winningPlan" : {
                    "stage" : "SORT",
                    "sortPattern" : {
                            "name" : 1
                    },
                    "limitAmount" : 10,
                    "inputStage" : {
                            "stage" : "COLLSCAN",
                            "filter" : {
                                    "$and" : [ ]
                            },
                            "direction" : "forward"
                    }
            },
            "rejectedPlans" : [ ]
    },
    "serverInfo" : {
            "host" : "Sachin-Mac.local",
            "port" : 27017,
            "version" : "3.0.2",
            "gitVersion" : "6201872043ecbbc0a4cc169b5482dcf385fc464f"
    },
    "ok" : 1
}