索引的管理操作 | 学习笔记

简介: 快速学习 索引的管理操作

开发者学堂课程【MongoDB精讲课程(上):索引的管理操作学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/726/detail/12962


索引的管理操作


内容介绍:

一、索引的查看

二、索引的创建

三、索引的移除

 

注:索引是一个小的集合,同时也会占用空间,若集合里创建了过多不必要的索引则会影响插入效果。

 

一、索引的查看

1、说明

返回一个集合中的所有索引的数组

2、语法命令

db.collection.getIndexes()

//collection:集合名称

//getIndexes:查询集合当中所有的索引

3、示例

输入内容:

> db.comment.getIndexes()

执行结果如下:

image.png

分析结果发现:

1)虽然输入时并没有创建索引,但索引查询的结果是一个数组,数组里面包含多个索引。

2)在 ”key:{_id:1} ,中的 ”_id” 是我们的主键, mongodb mysql 非常类似,在于主键都会默认创建一个唯一索引。

3)分析四个字段分别代表的含义,使信息描述清楚。

①首先”v”代表的是索引的引擎版本号(Version)。

②“2”代表的是当前 mongdodb 索引的引擎版本是第二个版本

//这两项为次要内容,仅作为了解补充。

③ “key” 是指在哪个字段上加索引,示例默认显示加的是主键, key 后面的“1”代表索引是通过升序的方式。

④ ”name” 代表索引的名称,默认是字段名 id 前加下划线。

⑤ “ns” 代表索引存放在哪个数据库下面的哪个集合,之后会有详细介绍。

// _id 存放在 articledb 数据库里面的 comment 集合里

 

二、索引的创建

1、说明

在集合上创建索引

2、语法

db.collection.createIndex(keys,options)

// collection:集合名称

// createIndex:调用的函数或者方法,里面包含两个参数,分别是 keys options

// keys 指在某些字段上要加索引, mongodbd 索引类型分单字段索引和复合字段索引,当字段需要加入多个复合索引时就为多个 keys

// options(可选择的),基本上用的较少,比较常见的有 unique nameunique 是指当你创建索引的时候,建立的索引是否唯一,mongodb mysql 对于这点是一致的,若两者不能冲突,只能设置成唯一,name 是指索引的名称,若未指定,MongoDB 将通过连接索引的字段名和排序顺序生成一个索引名称,即字段名加下划线,若指定,可以自行设置名称。

unique 和 name 是比较常用的,其他的可作为了解,可选项可加可不加,系统默认创建 keys ,我们需要学会使用。

3、示例

1)单字段索引示例

userid (经常查询要用到)字段建立索引:

输入内容:

> db.comment.createIndex({userid:1})

// userid是参数,“1”代表升序索引,“-1”代表降序索引,若为单字段,升序和降序基本上不影响索引的质量,此示例使用升序的索引进行示范。可选项可以不写,直接按回车得到以下结果:

image.png

之后我们再进行查询,输入内容:

> db.comment.getIndexes()

得到以下结果:

image.png

通过分析结果发现,这时出现两个索引,因为索引名称没有指定,则自动以升序的方式默认字段名加下划线。

2)复合索引示例

userid nickname 同时建立复合 (Compound) 索引:

输入内容:

> db.comment.createIndex({userid:1,nickname:-1})

//在创建 keys 的时,带多个字段 {userid:1,nickname:-1},此时 nickname 使用降序。

复合索引创建结果如下:

image.png

之后再进行查询,输入内容:

> db.comment.createIndexes()

得到以下结果:

image.png

分析结果可得:

结果中出现三个索引,第一个索引为默认的主键索引。第二个为之前创建的单字段索引,字段索引名称 name 默认为userid_1,此处的“1”仍代表升序,第三个为复合索引,key 带有多个字段,分别是 userid nickname,与之前唯一的区别在于,索引名称变为复合名称 userid_1_nickname_-1


三、索引的移除

1、说明

可以移除指定的索引,或移除所有索引。

2、语法

db.collection.dropIndex(index)

// dropIndex:删除指定的索引

// index:指定要删除的索引

3、移除指定索引的两个方法

1)可以通过索引规范文档指定索引进行删除

2)可以通过索引名称指定索引进行删除

//若要删除文本索引,只能使用指定索引名称这种方式进行删除。文本索引接触较少,此知识点作为了解补充。

示例1:

通过索引规范文档指定索引删除 comment 集合中 userid 字段上的升序索引:

输入内容:

> db.comment.dropIndex({userid:1})

// {userid:1} 作为条件放入括号中。

按回车后再输入 > db.comment.getIndexes() 进行查询

查询结果如下:

image.png

分析结果得出,从之前的三个索引变成了两个索引,userid 字段上的升序索引已经被删除。

示例2

通过索引名称指定索引删除 comment 集合中 userid 字段上的升序索引:

输入内容:

> db.comment.dropIndex( userid_1_nickname_-1)

按回车后再输入 > db.comment.getIndexes() 进行查询

查询结果如下:

image.png

分析结果得出,最后只剩下一个索引,其他索引都已被删除。

4、所有索引的移除

1)语法

db.collection.dropIndexes()

// dropIndex:指删除单个索引

// dropIndexes:指删除全部索引,删除所有索引时无需指定任何参数。

2)示例

输入内容:

> db.comment.dropIndexes()

按回车后再输入 > db.comment.getIndexes() 进行查询

查询结果如下:

image.png

分析得出,除了 id 以外的其他索引都会被删除。

相关文章
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
392 1
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
569 13
|
9月前
|
Ubuntu 安全 Linux
Linux错误排查:解决Ubuntu 20.4执行sudo apt-get update时出现的libnettle.so.6错误。
很有可能在你得到解决方案时,你也学到了不少Linux修复技巧。祝你处理计算机问题时顺利如麻!永远记得,各种问题总是像老鼠一样从意想不到的地方冒出来。但记住,不管它们跑到哪里,最终都逃不过你的捕鼠器。盖起你的计算机,拾起你的代码,大步向前!
281 28
|
9月前
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
363 25
|
9月前
|
Ubuntu 安全 Linux
Linux错误排查:解决Ubuntu 20.4执行sudo apt-get update时出现的libnettle.so.6错误。
很有可能在你得到解决方案时,你也学到了不少Linux修复技巧。祝你处理计算机问题时顺利如麻!永远记得,各种问题总是像老鼠一样从意想不到的地方冒出来。但记住,不管它们跑到哪里,最终都逃不过你的捕鼠器。盖起你的计算机,拾起你的代码,大步向前!
271 18
|
10月前
|
算法 安全 Go
公司局域网管理系统里的 Go 语言 Bloom Filter 算法,太值得深挖了
本文探讨了如何利用 Go 语言中的 Bloom Filter 算法提升公司局域网管理系统的性能。Bloom Filter 是一种高效的空间节省型数据结构,适用于快速判断元素是否存在于集合中。文中通过具体代码示例展示了如何在 Go 中实现 Bloom Filter,并应用于局域网的 IP 访问控制,显著提高系统响应速度和安全性。随着网络规模扩大和技术进步,持续优化算法和结合其他安全技术将是企业维持网络竞争力的关键。
225 2
公司局域网管理系统里的 Go 语言 Bloom Filter 算法,太值得深挖了
|
9月前
|
存储 监控 Java
G1原理—7.G1的GC日志分析解读
本文进行了TLAB的GC日志解读、YGC的GC日志解读、模拟YGC(单次GC及多次GC的不同场景)、打开实验选项查看YGC的详情日志信息、Mixed GC日志信息之初始标记过程、Mixed GC日志信息之混合回收过程。
|
测试技术 开发工具 git
写了BUG还想跑——闲鱼异常日志问题自动追踪-定位-分发机制
为了高效地发现、定位和解决预发问题,闲鱼团队研发了一套异常日志问题自动追踪-定位-分发机制。这套机制通过自动化手段,实现了异常日志的定时扫描、精准定位和自动分发,显著降低了开发和测试的成本,提高了问题解决的效率。
552 15
写了BUG还想跑——闲鱼异常日志问题自动追踪-定位-分发机制
|
存储 索引
什么情况下不应该创建索引?
索引应避免在很少使用的列、数据值少的列、text/image/bit类型列上创建,因为这些情况下索引不仅无助于提升查询速度,还会降低系统维护效率,增加存储开销。当数据修改频率远高于查询时,也不宜创建索引。
266 26
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(6)-索引使用(覆盖索引与回表查询,前缀索引,单列索引与联合索引 )、索引设计原则、索引总结
MySQL数据库——索引(6)-索引使用(覆盖索引与回表查询,前缀索引,单列索引与联合索引 )、索引设计原则、索引总结
478 1