23

假设我有一个带有 :price 和 :qty 字段的 Item 文档。有时我想查找与给定 :price AND :qty 匹配的所有文档,而在其他时候,它会单独为 :price 或单独为 :qty。

我已经为 :price 和 :qty 键编制了索引,但我是否还需要同时在两者上创建复合索引,或者单键索引是否足够?

编辑:我发现 mongodb 网站上的这篇文章非常有用:

http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ

4

2 回答 2

41

上的索引price有助于查询price. 上的索引qty有助于查询qty. price和上的索引qty有助于查询和上的priceAND 查询。因此,这就像以一个价格获得两个指数。但是,它对查询没有帮助。 priceqtyqty

您应该尽量减少您拥有的索引数量,因此删除您的一个单键索引并从该键开始创建一个复合索引。

作为一般规则,如果您对 、 和 进行查询xyz应该有一个类似 的索引{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 : ...})

因此,请确保您的查询中包含索引的起始键。

于 2010-06-11T13:03:04.567 回答
-6

如果您需要 :price 自己或 :qty 自己需要,那么复合索引将不起作用。

于 2010-06-10T17:29:34.310 回答