mongoDB索引总结

介绍

MongoDB使用的存储引擎是WiredTiger,其中索引构建使用的是 B+ tree 。

索引类型

单索引

db.members.createIndex({name:1});

复合索引

db.members.createIndex({ name:1,age:-1});

其他索引

地理空间索引(Geospatial Index)、文本索引(Text Indexes)、哈希索引(Hashed Indexes)。

#空间索引
 

db.members.createIndex({location : "2dsphere"})

#文本索引

db.reviews.createIndex( { comments: "text" } )

#哈希索引

db.collection.createIndex( { _id: "hashed" } )

来源:索引类型之地理空间索引

索引管理

查看

查看所有索引
#该语法命令运行要求是MongoDB 3.0+

db.collection.getIndexes()

创建

语法:

db.collection.createIndex(keys, options)

Key: 值为你要创建的索引字段

1: 指定按升序创建索引
-1: 按降序来创建索引


示例

db.members.createIndex({name:1});

options:接收可选参数

 示例

#background

db.values.createIndex({open: 1, close: 1}, {background: true})

#创建唯一索引

如果文档中的字段已经出现了重复值,则不可以创建该字段的唯一性索引。
如果新增的文档不具备加了唯一索引的字段,则只有第一个缺失该字段的文档可以被添加,索引中该键值被置为null。

db.members.createIndex({age:1},{unique:true});

#索引稀疏性

如果同一个索引既具有唯一性,又具有稀疏性,就可以保存多篇缺失索引键值的文档了。

db.sparsedemo.createIndex({name:1},{unique:true ,sparse:true});

来源:MongoDB创建索引_水月清辉的博客-CSDN博客_mongodb创建索引

删除 

#根据索引名删除

db.members.dropIndex("索引名称")

#根据定义删除

db.members.dropIndex({name:1})

执行计划分析(explain)

分析查询性能

分析查询性能(Analyze Query Performance)通常使用执行计划(解释计划、Explain Plan)来查看查询的情况,如查询耗费的时间、是否基于索引查询等。
 

 db.members.explain().find({name:"xxx"})

这里我们需要重点关注winningPlan中stage 的值含义:

COLLSCAN: 整个集合扫描
IXScan: 索引扫描
FETCH: 根据索引指向的文档的地址进行查询(相当于mysql中的回表查询)
PROJECTION_COVERED:映射覆盖,不需要回表查询
SORT: 需要再内存中排序,效率不高

覆盖查询

当查询条件和查询的<投影>只包含索引字段时,MongoDB直接从索引返回结果,而不扫描任何文档或将文档带入内存。这些覆盖的查询可能非常高效。

db.members.explain().find({ name:"zhangsan"},{_id:0, name:1});

我们在实际的使用中要尽量将winningPlan.stage优化成 PROJECTION_COVERED。

数据生存时间

针对日期字段,或者包含了日期元素的数组字段,可以使用设定了生存时间的索引,来自动删除字段值超过生存时间的文档。

构造数据

db.members.insertMany( [ 
    {
     name:"zhangsanss",
     age:19,tags:["00","It","SH"],
     create_time:new Date()}
    ] );

构造索引

db.members.createIndex({ create_time: 1},{expireAfterSeconds:30 });

在create_time字段上面创建了一个生存时间是30s的数据。

复合键索引不具备生存时间的特性

当索引键是包含日期元素的数组字段时,数组中最小的日期将被用来计算文档是否已经过期。

数据库使用一个后台线程来监测和删除过期的文档,删除操作可能会有一定的延迟 。

来源:

MongoDB索引详解_萧 炎的博客-CSDN博客_mongodb 索引参数解释

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值