mongodb--索引(笔记)

介绍

Index

  • 合适的索引可以大大提高数据库搜索能力
  • 对文档的部分内容进行排序的数据结构
  • 加快文档查询和文档排序的速度

类型:单键索引、复合键索引、多键索引

特性:唯一性、稀疏性、生存时间

创建索引

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

数组中的每一个元素都会在多键索引中创建一个键

创建唯一性索引 

# 如果这个文档中的balance 字段重复了,唯一性索引会创建失败
# 如果新创建文档中不包括这个唯一性索引字段,只有第一篇会被写入,并赋值null
db.accounts.createIndex({balance,1},{unique: true})

 稀疏性:复合键索引也可以具有稀疏性。如果文档中没有完全包含复合键里的字段,文档不会被加入索引中。

索引的生存时间:针对日期字段,或者包含日期元素的数组字段,可以使用设置生存时间的索引,自动删除超过生存时间的索引文档。(如果是数组,会使用数组中最小时间来计算过期时间)(复合键索引,不具备生存时间特性)(后台线程检测文档的过期时间,删除可能存在一定的延迟)

# 文档会在 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})

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值