什么是mongodb的集合扫描?

时间:2014-02-10 00:30:48

标签: mongodb mongodb-query

我知道什么是“全集扫描”。但我不确定术语“集合扫描”是否适用于使用B树游标的查询。使用基本光标以外的游标的查询是否执行集合扫描?

2 个答案:

答案 0 :(得分:2)

集合扫描就是扫描整个集合。当用户使用某些无法使用索引回答的条件请求查找文档时,会发生这种情况。    例如,我们有一个用户集合,其中包含姓名,年龄,头发颜色,地址,电话号码和国家/地区

user = {"name" : "ABC",
         "age" : 25,
         "hair color" : "brown",
         "address" : "XYZ",
         "phone number" : 1234567890,
         "country" :"Canada"
       }

此外,如果我们在名称上有索引并使用,

查询数据库
 db.users.find({"name" : "ABC"});

由于我们在name字段上有一个索引,因此查询优化器会将索引用作性能优化方法。

假设您在DB中查询其他字段。可以说,地址

db.users.find({"address" : "XYZ"});

此处查询优化器希望缩短查询的响应时间,但由于它没有关于集合中记录的先验信息,因此必须遍历集合中的每个文档以查看该文档&# 39; s地址字段与查询中的地址字段匹配。如果是,那么我们返回该文档。我相信你知道这是索引的来源,因为它通过"分组"来保持指针。根据某些标准的文档。

有关详情,请查看here

对于你的问题,一个使用B树游标的查询,它是为了避免执行收集扫描,因此使用除基本游标之外的任何类型的游标进行查询"主要是"避免收集扫描。

即使在要查询的字段上存在索引,也可以强制它执行集合扫描。你可以阅读它here

答案 1 :(得分:2)

简短的回答是两个术语相同,或者说只有“完全收集扫描”。

如果您的查询使用的是B树光标,则按照定义扫描集合put正在遍历索引以查找查询的文档。

集合扫描发生在没有索引可以满足查询的情况下,我们必须扫描完整集合才能找到所需的文档。请参阅链接以获取所有信息。

http://docs.mongodb.org/manual/reference/method/cursor.explain/