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数据库常用的10条操作命令
Jun 18 MongoDB
详解MongoDB的条件查询和排序
Jun 23 MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 MongoDB
阿里云服务器部署mongodb的详细过程
Sep 04 MongoDB
关于CentOS 8 搭建MongoDB4.4分片集群的问题
Oct 24 MongoDB
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
Nov 01 MongoDB
MongoDB使用场景总结
Feb 24 MongoDB
MongoDB误操作后使用oplog恢复数据
Apr 11 MongoDB
Centos系统通过Docker安装并搭建MongoDB数据库
Apr 12 MongoDB
MongoDB数据库部署环境准备及使用介绍
一次线上mongo慢查询问题排查处理记录
Mar 18 #MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 #MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
MongoDB使用场景总结
SpringBoot系列之MongoDB Aggregations用法详解
MongoDB连接数据库并创建数据等使用方法
You might like
zf框架的Filter过滤器使用示例
2014/03/13 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
两款万能的php分页类
2015/11/12 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python解析模块(ConfigParser)使用方法
2013/12/10 Python
django加载本地html的方法
2018/05/27 Python
python使用turtle绘制分形树
2018/06/22 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
证婚人经典证婚词
2014/01/09 职场文书
小学生安全教育广播稿
2014/10/20 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
php+laravel 扫码二维码签到功能
2021/05/15 PHP
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL