mongoDB数据库索引快速入门指南


Posted in MongoDB onMarch 23, 2022

MongoDB 索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

mongo可以通过创建索引来提高查询的速度     

1. 开始与准备数据

启动mongo并选择目标数据库

mongo

use test

然后准备一组数据(10万条数据,较大的数据量)

for(i=0;i<100000;i++){db.test.insert({name:'test'+i,age:i})}

mongoDB数据库索引快速入门指南

2. 创建索引前

查询一下name为"test90000"的数据。并使用explain方法来查看查询的性能。

db.test1.find({name:"test90000"}).explain('executionStats')

mongoDB数据库索引快速入门指南

这里可以看到查询花了53毫秒

3. 创建索引 createIndex

给字段name创建索引

db.test1.createIndex({name: 1})

mongoDB数据库索引快速入门指南

查看索引:

mongoDB数据库索引快速入门指南

给name创建索引之前,_id字段默认为索引,创建后集合有两个索引,"_id"和"name"。

4. 创建索引后

再次查找该条数据,并查看查询的性能,发现所用时间接近0毫秒。即设定索引后查询性能大大提升了。

db.test1.find({name:"test90000"}).explain('executionStats')

mongoDB数据库索引快速入门指南

5. 删除索引

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

查看之

db.test1.getIndexes()

mongoDB数据库索引快速入门指南

如图,只剩下了"_id"一个索引。"name"索引已被删除。

6.唯一索引与符合索引

①唯一索引

db.test1.createIndex({name: 1},{"unique":true})

mongoDB数据库索引快速入门指南

查看索引

db.test1.getIndexes()

mongoDB数据库索引快速入门指南

可以看到,unique为true。

设定为唯一索引后,该索引的值不能重复。
(这个特点也可以用于写爬虫时不想要某字段的重复数据时,达到去重的目的。)

如图插入一条name重复的数据时,会产生如下报错:

mongoDB数据库索引快速入门指南

即插入失败了。

②复合索引

创建多个索引的方式被称为复合索引。

首先删掉刚刚创建的索引name

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

然后一次创建name,age两个索引

db.test1.createIndex({'name':1,'age':1})

mongoDB数据库索引快速入门指南

处理海量数据时,在一定的规则下使用复合索引,可以大幅提升查询的性能。具体比较复杂,这里不再详解。

MongoDB 相关文章推荐
MongoDB balancer的使用详解
Apr 30 MongoDB
MongoDB数据库的安装步骤
Jun 18 MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 MongoDB
centos8安装MongoDB的详细过程
Oct 24 MongoDB
MongoDB使用场景总结
Feb 24 MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 MongoDB
MongoDB误操作后使用oplog恢复数据
Apr 11 MongoDB
Centos系统通过Docker安装并搭建MongoDB数据库
Apr 12 MongoDB
SpringBoot集成MongoDB实现文件上传的步骤
Apr 18 MongoDB
MongoDB数据库之添删改查
Apr 26 MongoDB
详解MongoDB排序时内存大小限制与创建索引的注意事项
May 06 MongoDB
NoSQL优缺点与MongoDB数据库简介
Jun 05 MongoDB
MongoDB数据库部署环境准备及使用介绍
一次线上mongo慢查询问题排查处理记录
Mar 18 #MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 #MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
MongoDB使用场景总结
SpringBoot系列之MongoDB Aggregations用法详解
MongoDB连接数据库并创建数据等使用方法
You might like
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
基于jQuery的星级评分插件
2011/08/12 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
使用js原生实现年份轮播选择效果实例
2021/01/12 Javascript
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
Python程序控制语句用法实例分析
2020/01/14 Python
python dumps和loads区别详解
2020/02/04 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
高级销售员求职信
2013/10/25 职场文书
三年级科学教学反思
2014/01/29 职场文书
市场营销工作计划书
2014/05/06 职场文书
市场部岗位职责范本
2015/04/15 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
Nginx反向代理、重定向
2022/04/13 Servers
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js