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 orm框架的注意事项及简单使用
Jun 20 MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 MongoDB
MongoDB安装使用并实现Python操作数据库
Jun 28 MongoDB
Mongo服务重启异常问题的处理方法
Jul 01 MongoDB
MongoDB使用场景总结
Feb 24 MongoDB
MongoDB支持的数据类型
Apr 11 MongoDB
Centos系统通过Docker安装并搭建MongoDB数据库
Apr 12 MongoDB
SpringBoot集成MongoDB实现文件上传的步骤
Apr 18 MongoDB
MongoDB数据库部署环境准备及使用介绍
一次线上mongo慢查询问题排查处理记录
Mar 18 #MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 #MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
MongoDB使用场景总结
SpringBoot系列之MongoDB Aggregations用法详解
MongoDB连接数据库并创建数据等使用方法
You might like
php date()日期时间函数详解
2010/05/16 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
用python制作游戏外挂
2018/01/04 Python
Python装饰器简单用法实例小结
2018/12/03 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
大学生农村教师实习自我鉴定
2013/09/21 职场文书
师说教学反思
2014/02/07 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
2014年副班长工作总结
2014/12/10 职场文书
优秀党员推荐材料
2014/12/18 职场文书
订货会主持词
2015/07/01 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL
Node与Python 双向通信的实现代码
2021/07/16 Javascript