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 相关文章推荐
SpringBoot整合MongoDB的实现步骤
Jun 23 MongoDB
MongoDB安装使用并实现Python操作数据库
Jun 28 MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 MongoDB
mongodb清除连接和日志的正确方法分享
Sep 15 MongoDB
关于CentOS 8 搭建MongoDB4.4分片集群的问题
Oct 24 MongoDB
centos8安装MongoDB的详细过程
Oct 24 MongoDB
MongoDB连接数据库并创建数据等使用方法
Nov 27 MongoDB
MongoDB误操作后使用oplog恢复数据
Apr 11 MongoDB
MongoDB支持的索引类型
Apr 11 MongoDB
MongoDB修改oplog大小的四种方法
Apr 11 MongoDB
MongoDB数据库部署环境准备及使用介绍
一次线上mongo慢查询问题排查处理记录
Mar 18 #MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 #MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
MongoDB使用场景总结
SpringBoot系列之MongoDB Aggregations用法详解
MongoDB连接数据库并创建数据等使用方法
You might like
一个MYSQL操作类
2006/11/16 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
Three.js快速入门教程
2016/09/09 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
在Django框架中设置语言偏好的教程
2015/07/27 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
Python 加密的实例详解
2017/10/09 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
应聘教师推荐信
2013/10/31 职场文书
父亲生日宴会答谢词
2014/01/10 职场文书
酒店节能降耗方案
2014/05/08 职场文书
运动会班级口号
2014/06/09 职场文书
租房协议书
2014/09/12 职场文书
新年晚会开场白
2015/05/29 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python