1. 唯一索引
对字段设置唯一索引时,可以保证字段都是唯一性
db.collection.createIndex({field1:boolean, field2:boolean },{unique: true})
说明:我们在新建字段为唯一索引时,对应的字段不存在,索引会将其作为null存储,如果对文档新增第一条时,没保存字段对应的值时,会以null保存,第二条还是对指定字段对应的值,新增数据时,之前已经存在null,所以会导致新增失败。
对文档中已经存在的相同的字段新建唯一索引
唯一索引不能够创建在具有重复值的键上,如果你一定要在这样的键上创建,使用dropDups参数,系统对重复值的键上只保留第一条记录,剩下的记录会被删除
db.orders.createIndex({onumber:1},{unique:true,dropDups:true})
2. 索引的名称
我们之前在创建索引时,没指定索引名称,MongoDB会生成一个默认的索引名称,我们可以通过name参数来指定我们新建索引的名称
db.collection.createIndex({field1:boolean,field2:boolean },{name: "index_name"})
3. 后台方式创建索引
background 在创建索引时,会阻塞MongoDB其它操作,比如查询MongoDB时,background为trues时可指定以后台方式创建索引,默认值时false
db.collection.createIndex({{field1:boolean,field2:boolean }} },{background: true})
4. 稀疏索引
sparse:稀疏索引只包含有索引字段的文档,即使索引字段包含空值,指数跳过缺少索引字段。索引是“稀疏的”,因为它不包含集合的所有文档。与之相反,非稀疏索引中包含一个集合中的所有文档,这些文档中不包含索引字段的空值。类似于$exists用来判断一个field是否存在
- db.collection.createIndex({{field1:boolean,field2:boolean }} },{ sparse: true})
5. 执行计划
MongoDB 提供了一个 explain 命令让我们获知系统如何处理查询请求。利用 explain 命令,我们可以很好地观察系统如何使用索引来加快检索,同时可以针对性优化索引。
db.orders.find({onumber:1}).hint("onumber_1").explain()
对一些比较重要的参数说明:
1) n:当前查询返回的文档数量。
2)millis:当前查询所需时间,毫秒数。
3)indexBounds:当前查询具体使用的索引。
4)nscanned:扫描document的行数。
5)cursor:返回游标类型(BasicCursor和BtreeCursor),我们这边使用BtreeCursor类型。
6)nscannedObjects:被扫描的文档数量。
7)scanAndOrder:是否在内存中排序。