MongoDB复合索引用法

时间:2013-07-18 22:46:18

标签: mongodb indexing compound-index

假设我有以下两个键的文件:

1)key1
2)key2

如果我在两者上创建复合索引..

{'key1':1,'key2':1}

当运行仅与key1相关的查询时,是否使用上面的索引?或者我还需要为key1创建特定的索引?

由于

2 个答案:

答案 0 :(得分:13)

在MongoDB 中,您可以使用索引前缀来查询数据库。你不能使用任何其他东西。如果您的查询不包含密钥前缀,则索引不会被使用

假设你提出的索引{'key1':1,'key2':1}

将使用索引的查询:

  • db.some.find({key1 : {$gt : 100}}) - 使用前缀
  • db.some.find({key1 : {$gt : 100}, key2 : {$lt : 30}}) - 使用完整索引
  • db.some.find({key3 : 'test'}).sort({key1 : 1}) - 使用排序前缀(方向匹配)

不使用索引的查询:

  • db.some.find({key2 : {$gt : 100}}) - 索引顺序很重要 - key2不是前缀
  • db.some.find({key3 : 'test'}).sort({key1 : -1}) - 索引方向对多列索引很重要
  • db.some.find({key3 : 'test'}).sort({key2 : 1}) - 它不是前缀

答案 1 :(得分:2)

是。在B树索引中,您可以使用列的前缀。

因此,你可以在'key1'上使用索引进行查询(但不能有效地使用'key2',索引中的列顺序很重要。)

这与印刷电话簿中的情况相同,印刷电话簿是[lastName,firstName]的索引。您可以使用它来轻松地通过lastName查找人员(而不是通过firstName轻松查找,但仍然比调用所有人并询问他们的名字更有效。)