说我有一个Item文档,其中包含:price和:qty字段。我有时想找到与给定匹配的所有文件:价格和:数量,在其他时候它将是:价格本身或:数量本身。
我已经将:price和:qty键编入索引,但是我是否还需要同时创建复合索引或单键索引是否足够?
编辑:我在mongodb网站上发现这篇文章非常有用:
答案 0 :(得分:42)
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)
如果您需要:价格本身或:自己的数量,那么复合指数将无效。