何时索引mongodb中的多个键

时间:2010-06-10 17:26:58

标签: mongodb mongodb-indexes

说我有一个Item文档,其中包含:price和:qty字段。我有时想找到与给定匹配的所有文件:价格和:数量,在其他时候它将是:价格本身或:数量本身。

我已经将:price和:qty键编入索引,但是我是否还需要同时创建复合索引或单键索引是否足够?

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

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

2 个答案:

答案 0 :(得分:42)

price上的索引有助于price上的查询。 qty上的索引有助于qty上的查询。 priceqty上的索引有助于对pricepriceqty上的查询进行查询。所以,就像以一个价格获得两个指数一样。但是,对qty的查询没有帮助。

您应该最小化索引的数量,因此删除一个单键索引并创建一个以该键开头的复合索引。

作为一般规则,如果您对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 : ...})

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

答案 1 :(得分:-6)

如果您需要:价格本身或:自己的数量,那么复合指数将无效。