Mongodb / Mongoid查询索引属性的速度慢

时间:2011-10-09 15:44:03

标签: mongodb ubuntu mongoid

我有一个像这样的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系列?没有索引照顾这个吗?

2 个答案:

答案 0 :(得分:3)

  

执行= 35ms PROFILER :: Sun 10月9日23:36:20 [conn20]查询ccc7.links ntoreturn:1 nscanned: 16402 reslen:20 35ms

显然存在问题。 实际上,如果仅在索引字段上请求,则nscanned文档的数量应该等于(等于)结果数。

来自documentation

  

nscanned检查的项目数(文档或索引条目)。项目   可能是对象或索引键。如果涉及“覆盖指数”,   nscanned可能高于nscannedObjects。

正如所建议的,对您的请求的解释应该提供更多信息。

您能否提供以下结果:

db.link.getIndexes()

答案 1 :(得分:1)

所以,这里不完全清楚。您的所有网址都是唯一的“无网址”选项。

如果是这样,并且您按升序索引该列,则会看到字母扫描的结果最多为“n”。由于您的所有网址都以h开头,因此您可能会看到延迟。

不是100%正面,但这是可能的。