Index数据库
类型:单键索引、复合键索引、多键索引数组
特性:惟一性、稀疏性、生存时间bash
db.collections.createIndex()数据结构
# 单键索引 # 给collections表的name建立一个正向排序的索引 db.collections.createIndex({name: 1}) # 复合键索引 db.collections2.createIndex({name: 1,balance: -1}) # 多键索引 db.collections3.createIndex({name: 1}) db.collections3.createIndex({currency: 1}) # 查询表使用的索引 db.collections.getIndexes()
数组中的每个元素都会在多键索引中建立一个键spa
建立惟一性索引 线程
# 若是这个文档中的balance 字段重复了,惟一性索引会建立失败 # 若是新建立文档中不包括这个惟一性索引字段,只有第一篇会被写入,并赋值null db.accounts.createIndex({balance,1},{unique: true})
稀疏性:复合键索引也能够具备稀疏性。若是文档中没有彻底包含复合键里的字段,文档不会被加入索引中。code
索引的生存时间:针对日期字段,或者包含日期元素的数组字段,能够使用设置生存时间的索引,自动删除超过生存时间的索引文档。(若是是数组,会使用数组中最小时间来计算过时时间)(复合键索引,不具有生存时间特性)(后台线程检测文档的过时时间,删除可能存在必定的延迟)blog
# 文档会在 lastAccess 字段时间的20秒后删除 db.accounts.createIndex({lastAccess: 1},{expireAfterSeconds: 20})
db.collection.explain()排序
能够进行分析的命令包括:aggregate(),count(),distinct(),find(),group(),remove,update()索引
db.collections2.explain().find().sort({name: 1, balance: -1})
分析效果介绍 winnigPlan 下 stage
COLLSCAN 表明须要遍历全表(不太好的查询) IXSCAN 使用索引字段查询 SORT 使用未建立索引字段进行排序
db.collections.dropIndex()
若是想修改索引,须要先删除原文档索引,再建立新索引。(不然原文档不会包含新的索引)
# 查询全部索引 db.accounts.getIndexes()
# 按照索引名删除索引 db.accounts.dropIndex("name_1") # 使用索引定义删除索引 db.accounts.dropIndex({"name": 1,"balance": -1})