何时索引mongodb中的多个键

Eva*_*van 23 mongodb mongodb-indexes

说我有一个物品文件:price和:qty字段.我有时想要找到与给定匹配的所有文件:price AND:qty,而在其他时候它将是:价格本身或:qty本身.

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

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

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

kri*_*ina 42

price帮助查询的索引price.qty帮助查询的索引qty.一个指数price,并qty与查询的帮助price和查询的priceqty.所以,就像以一个价格获得两个指数一样.但是,它对查询没有帮助qty.

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

作为一般规则,如果你正在做一个查询x,yz,你应该有一个像指数{x:1, y:1, z:1}.此索引将快速执行以下查询:

db.foo.find({x : ..., y : ..., z : ...})
db.foo.find({x : ..., y : ...})
db.foo.find({x : ...})
Run Code Online (Sandbox Code Playgroud)

它不会使这些查询快速:

db.foo.find({y : ..., z : ...})
db.foo.find({y : ...})
Run Code Online (Sandbox Code Playgroud)

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

  • 自1.6+以来已经发生了变化,现在Mongo可以使用复合索引中的任何键:http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeysIndexes (5认同)
  • 如果查询`db.foo.find({x:...,z:...})`,当查询中缺少中间索引键时,它会快速查询吗? (3认同)
  • @Zsolt:在许多情况下是真的,但只有明确暗示. (2认同)