何时对 mongodb 中的多个键进行索引
Posted
技术标签:
【中文标题】何时对 mongodb 中的多个键进行索引【英文标题】:when to index on multiple keys in mongodb 【发布时间】:2011-03-02 07:19:44 【问题描述】:假设我有一个带有 :price 和 :qty 字段的 Item 文档。有时我想查找与给定 :price AND :qty 匹配的所有文档,而在其他时候,它会单独为 :price 或单独为 :qty。
我已经为 :price 和 :qty 键编制了索引,但我是否还需要同时为这两个键创建复合索引,或者单键索引是否足够?
编辑:我发现 mongodb 网站上的这篇文章非常有用:
http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ
【问题讨论】:
是的,我很想知道其他人的想法。我有一个可以搜索多个“字段”的集合。显然 _id 已编入索引,但我还有一些其他的。 【参考方案1】:如果您需要 :price 本身或 :qty 本身,则复合索引将不起作用。
【讨论】:
我现在只有一个索引,我想知道我是否还需要一个复合索引来用于在 :price 和 :qty 上运行的查询 这不是真的。复合索引 :price+:qty 将有助于 :price 本身,因为 :price 在复合索引中是第一位的。【参考方案2】:price
上的索引有助于查询 price
。 qty
上的索引有助于查询 qty
。 price
和 qty
上的索引有助于对 price
的查询以及对 price
和 qty
的查询。因此,这就像以一个价格获得两个指数。不过,这对qty
的查询没有帮助。
您应该尽量减少您拥有的索引数量,因此删除一个单键索引并从该键开始创建一个复合索引。
作为一般规则,如果您对x
、y
和z
进行查询,则应该有一个类似x:1, y:1, z:1
的索引。该索引将使以下查询快速:
db.foo.find(x : ..., y : ..., z : ...)
db.foo.find(x : ..., y : ...)
db.foo.find(x : ...)
它不会使这些查询变得很快:
db.foo.find(y : ..., z : ...)
db.foo.find(y : ...)
因此,请确保您的查询中包含索引的起始键。
【讨论】:
自 1.6+ 以来已更改,现在 Mongo 可以使用复合索引中的任何键:mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeysIndexes 确实,我忘了补充。 对于db.foo.find(x : ..., z : ...)
的查询怎么样,当查询中缺少中间索引键时,它会加快查询速度吗?以上是关于何时对 mongodb 中的多个键进行索引的主要内容,如果未能解决你的问题,请参考以下文章