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数据库的安装步骤
Jun 18 MongoDB
浅析MongoDB之安全认证
Jun 26 MongoDB
关于CentOS 8 搭建MongoDB4.4分片集群的问题
Oct 24 MongoDB
SpringBoot系列之MongoDB Aggregations用法详解
Feb 12 MongoDB
一次线上mongo慢查询问题排查处理记录
Mar 18 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
MongoDB数据库部署环境准备及使用介绍
一次线上mongo慢查询问题排查处理记录
Mar 18 #MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 #MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
MongoDB使用场景总结
SpringBoot系列之MongoDB Aggregations用法详解
MongoDB连接数据库并创建数据等使用方法
You might like
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
PHP简单遍历对象示例
2016/09/28 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
详解django.contirb.auth-认证
2018/07/16 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
2019/05/27 Python
python3.4中清屏的处理方法
2020/07/06 Python
Python descriptor(描述符)的实现
2020/11/15 Python
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
学校经典推荐信
2013/10/30 职场文书
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
给朋友的道歉信
2014/01/09 职场文书
优秀医生事迹材料
2014/02/12 职场文书
四风问题对照检查材料
2014/09/22 职场文书
先进个人事迹材料
2014/12/29 职场文书
2015年宣传工作总结
2015/04/08 职场文书
同乡会致辞
2015/07/30 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书