我有一个像这样的mongoid模型:
class Link
include Mongoid::Document
include Mongoid::Timestamps
field :url, type: String
index :url, background: true
end
现在我有两个启用了分析的查询:
Link.where(url: "http://stackoverflow.com/questions/ask").first # =># <Link _id .....>
已执行&lt; 1ms ,没有缓慢的记录
Link.where(url: "no url").first # =># nil
执行 = 35ms * PROFILER :: * Sun Oct 9 23:36:20 [conn20] query ccc7.links ntoreturn:1 nscanned:16402 reslen :20 35毫秒
我的问题:
显然索引工作正常,但为什么不存在mongodb这么长时间才能查询?甚至扫描整个mongo系列?没有索引照顾这个吗?
答案 0 :(得分:3)
执行= 35ms PROFILER :: Sun 10月9日23:36:20 [conn20]查询ccc7.links ntoreturn:1 nscanned: 16402 reslen:20 35ms
显然存在问题。 实际上,如果仅在索引字段上请求,则nscanned文档的数量应该等于(等于)结果数。
nscanned检查的项目数(文档或索引条目)。项目 可能是对象或索引键。如果涉及“覆盖指数”, nscanned可能高于nscannedObjects。
正如所建议的,对您的请求的解释应该提供更多信息。
您能否提供以下结果:
db.link.getIndexes()
答案 1 :(得分:1)
所以,这里不完全清楚。您的所有网址都是唯一的“无网址”选项。
如果是这样,并且您按升序索引该列,则会看到字母扫描的结果最多为“n”。由于您的所有网址都以h开头,因此您可能会看到延迟。
不是100%正面,但这是可能的。