MongoDB支持复合索引,所谓复合索引就是一个索引包含多个字段,例如为如下collection建立一个复合索引:
collection {
user_id:
score:
……
}
db.col.createIndex({‘user_id’ : 1, ‘score’ : -1})
有数据库基础的同学对这个也没有什么疑惑,而且应该知道1表示升序,-1表示降序。
- 在MongoDB的复合索引中不允许有hash索引
- 复合索引最多包含31个字段
其实复合索引的创建和使用并没有太多新鲜的内容,和单字段索引差不多,但是值得一讲的是复合索引的前缀匹配,这个应该在任何支持复合索引的数据库中都存在,这里就是以MongoDB为例。
假如有这样一个复合索引:
{'item' : 1, 'loc' : 1, 'stock' : 1}
那么上述索引有以下两个索引前缀:
1. {'item' : 1}
2. {'item' : 1, 'loc' : 1}
任何查询可以利用复合索引或复合索引的前缀索引加速查找。也就是说,上述一个复合索引可以支持以下三种索引:
{'item' : 1}
{'item' : 1, 'loc' : 1}
{'item' : 1, 'loc' : 1, 'stock' : 1}
但是需要以下字段的索引上述复合索引是无能为力的,只能另建索引:
{'loc' : 1}
{'stock' : 1}
{'loc' : 1, 'stock' : 1}
所以,一直提倡建立复合索引,因为复合索引能够带来额外的好处,根据业务查询,建立合适的复合索引,真是美滋滋。