假设我有一个包含以下两个键的文档:
1) key1
2) key2
如果我要在这两个键上创建复合索引...
当运行仅与key1相关的查询时,上述索引是否被使用?还是我需要创建仅针对key1的特定索引?
谢谢。
1) key1
2) key2
如果我要在这两个键上创建复合索引...
{'key1':1,'key2':1}
当运行仅与key1相关的查询时,上述索引是否被使用?还是我需要创建仅针对key1的特定索引?
谢谢。
{'key1':1,'key2':1}
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})
- 它不是前缀是的,在B树索引中,您可以使用列的前缀。
因此,您可以使用索引查询“key1”(但对于“key2”,索引中的列顺序很重要,效率会受到影响)。
这与印刷电话簿相同,它是一个[lastName,firstName]索引。您可以轻松地通过lastName查找人(通过firstName不太容易,但仍比打电话问每个人的名字更有效)。