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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 快速学习 索引的管理操作

开发者学堂课程【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 以外的其他索引都会被删除。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
6月前
|
存储 算法 关系型数据库
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
117 0
|
6月前
|
SQL 关系型数据库 MySQL
Mysql基础篇(创建、管理、增删改表)-2
Mysql基础篇(创建、管理、增删改表)
116 0
|
6月前
|
存储 SQL 关系型数据库
Mysql基础篇(创建、管理、增删改表)-1
Mysql基础篇(创建、管理、增删改表)
149 0
|
存储 自然语言处理 算法
【MySQL从入门到精通】【高级篇】(十九)索引的分类&创建索引的三种方式&删除索引的两种方式
MySQL中的索引包括普通索引、全文索引、单列索引、多列索引和空间索引等。
378 0
【MySQL从入门到精通】【高级篇】(十九)索引的分类&创建索引的三种方式&删除索引的两种方式
|
存储 关系型数据库 MySQL
MySql基础-笔记4 -数据表创建、删除和数据插入、查询等操作
MySql基础-笔记4 -数据表创建、删除和数据插入、查询等操作
131 0
MySql基础-笔记4 -数据表创建、删除和数据插入、查询等操作
|
SQL 关系型数据库 MySQL
MySQL基础-表操作~修改数据
修改数据的具体语法为: UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
146 0
|
存储 SQL Java
Mysql数据库表字段设计优化(状态列)
初始状态码(java int 32 long 64),int 可以表示31种(除去0000),long可以表示63种(除去0000),当然不可能将0000赋值给初始状态,一般来讲,选择int还是long是根据具体业务需求来决定的。
586 0
Mysql数据库表字段设计优化(状态列)
|
存储 数据库 双11
索引库维护|学习笔记
快速学习索引库维护
106 0
索引库维护|学习笔记
测试关于索引的操作-创建索引
测试关于索引的操作-创建索引
|
JSON 数据格式 开发者
创建索引库和索引说明 | 学习笔记
快速学习创建索引库和索引说明
创建索引库和索引说明 | 学习笔记