假设我有一个带有 :price 和 :qty 字段的 Item 文档。有时我想查找与给定 :price AND :qty 匹配的所有文档,而在其他时候,它会单独为 :price 或单独为 :qty。
我已经为 :price 和 :qty 键编制了索引,但我是否还需要同时在两者上创建复合索引,或者单键索引是否足够?
编辑:我发现 mongodb 网站上的这篇文章非常有用:
假设我有一个带有 :price 和 :qty 字段的 Item 文档。有时我想查找与给定 :price AND :qty 匹配的所有文档,而在其他时候,它会单独为 :price 或单独为 :qty。
我已经为 :price 和 :qty 键编制了索引,但我是否还需要同时在两者上创建复合索引,或者单键索引是否足够?
编辑:我发现 mongodb 网站上的这篇文章非常有用:
上的索引price
有助于查询price
. 上的索引qty
有助于查询qty
. price
和上的索引qty
有助于查询和上的price
AND 查询。因此,这就像以一个价格获得两个指数。但是,它对查询没有帮助。 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 : ...})
因此,请确保您的查询中包含索引的起始键。
如果您需要 :price 自己或 :qty 自己需要,那么复合索引将不起作用。