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数据库常用的10条操作命令
Jun 18 MongoDB
浅析MongoDB之安全认证
Jun 26 MongoDB
Mongo服务重启异常问题的处理方法
Jul 01 MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 MongoDB
MongoDB日志切割的三种方式总结
Sep 15 MongoDB
MongoDB使用场景总结
Feb 24 MongoDB
mongoDB数据库索引快速入门指南
Mar 23 MongoDB
MongoDB修改oplog大小的四种方法
Apr 11 MongoDB
Centos系统通过Docker安装并搭建MongoDB数据库
Apr 12 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
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
PHP一些常用的正则表达式字符的一些转换
2008/07/29 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
javaScript语法总结
2016/11/25 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
django model去掉unique_together报错的解决方案
2016/10/18 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
Python异常处理知识点总结
2019/02/18 Python
pycharm 安装JPype的教程
2019/08/08 Python
pandas数据处理进阶详解
2019/10/11 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
怎样自定义一个异常类
2016/09/27 面试题
成考报名单位证明范本
2014/01/16 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
2014年度安全工作总结
2014/12/04 职场文书
2015年商场工作总结
2015/04/27 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python