我知道什么是“全集扫描”。但我不确定术语“集合扫描”是否适用于使用B树游标的查询。使用基本光标以外的游标的查询是否执行集合扫描?
答案 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/