在MongoDB中支持多种类型的索引,包括单字段索引、复合索引、多key索引、文本索引等,每种类型的索引有不同的使用场合。
1.单字段索引
指的是在索引中只包含了一个键,MongoDB默认创建的_Id索引也是这种类型
创建方式:createIndexes({索引键:排序规则})
db.user.createIndex({name:1})
2.交叉索引
交叉索引就是为一个集合的多个字段分别建立索引,在查询的时候通过多个字段作为查询条件,这种情况称为交叉索引。
在查询文档时,在查询条件中包含一个交叉索引键或者在一次查询中使用多个交叉索引键作为查询条件都会触发交叉索引。
举例说明:
db.user.createIndex({organization:1},{background:true})
db.user.createIndex({age:1},{background:true})
db.user.find({$and:[{name:"梁牡党"},{age:54}]}).explain()
3.复合索引
复合索引是单字段索引的升级版本,它针对多个字段联合创建索引,先按第一个字段排序,第一个字段相同的文档按第二个字段排序,以此类推
语法格式:
db.COLLECTION_NAME.createIndex({索引键名:排序规则, 索引键名:排序规则,......});
db.user.createIndex({name:1,age:1},{background:true});
复合索引能满足的查询场景比单字段索引更丰富,不光能满足多个字段组合起来的查询,也能满足所有能匹配符合索引前缀的查询。
创建复合索引后,按照name或按照name+age两种查询方式都可以触发这个索引。
4.多key索引
当索引的字段为数组时,创建出的索引称为多key索引,多key索引会为数组的每个元素建立一条索引。
语法格式:
db.COLLECTION_NAME.createIndex({数组键名:排序规则});
db.c1.createIndex({hobby:1},{background:true});