mongodb--索引(笔记)

介绍

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})