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使用profile分析慢查询的步骤
Apr 30 MongoDB
MongoDB balancer的使用详解
Apr 30 MongoDB
MongoDB 常用的crud操作语句
Jun 20 MongoDB
浅析MongoDB之安全认证
Jun 26 MongoDB
MongoDB安装使用并实现Python操作数据库
Jun 28 MongoDB
Mongo服务重启异常问题的处理方法
Jul 01 MongoDB
mongodb清除连接和日志的正确方法分享
Sep 15 MongoDB
MongoDB连接数据库并创建数据等使用方法
Nov 27 MongoDB
MongoDB使用场景总结
Feb 24 MongoDB
MongoDB支持的索引类型
Apr 11 MongoDB
Mongodb 迁移数据块的流程介绍分析
Apr 18 MongoDB
MongoDB数据库之添删改查
Apr 26 MongoDB
MongoDB数据库部署环境准备及使用介绍
一次线上mongo慢查询问题排查处理记录
Mar 18 #MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 #MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
MongoDB使用场景总结
SpringBoot系列之MongoDB Aggregations用法详解
MongoDB连接数据库并创建数据等使用方法
You might like
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
js实现每日签到功能
2018/11/29 Javascript
JS实现简易计算器
2020/02/14 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
基于python实现学生管理系统
2018/10/17 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
python实现大文本文件分割
2019/07/22 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
Pytorch转tflite方式
2020/05/25 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
What is EJB
2016/07/22 面试题
安全生产投入制度
2014/01/29 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
岳庙导游词
2015/02/04 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书