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 23 MongoDB
浅析MongoDB之安全认证
Jun 26 MongoDB
Mongo服务重启异常问题的处理方法
Jul 01 MongoDB
MongoDB日志切割的三种方式总结
Sep 15 MongoDB
SpringBoot系列之MongoDB Aggregations用法详解
Feb 12 MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
Feb 24 MongoDB
mongoDB数据库索引快速入门指南
Mar 23 MongoDB
MongoDB误操作后使用oplog恢复数据
Apr 11 MongoDB
MongoDB支持的数据类型
Apr 11 MongoDB
Centos系统通过Docker安装并搭建MongoDB数据库
Apr 12 MongoDB
NoSQL优缺点与MongoDB数据库简介
Jun 05 MongoDB
MongoDB数据库部署环境准备及使用介绍
一次线上mongo慢查询问题排查处理记录
Mar 18 #MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 #MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
MongoDB使用场景总结
SpringBoot系列之MongoDB Aggregations用法详解
MongoDB连接数据库并创建数据等使用方法
You might like
重置版宣传动画
2020/04/09 魔兽争霸
php实现搜索类封装示例
2016/03/31 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
javascript 数组排序函数
2009/08/20 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
python二叉树的实现实例
2013/11/21 Python
python基础教程之数字处理(math)模块详解
2014/03/25 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
Python新手学习标准库模块命名
2020/05/29 Python
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
成立公司计划书
2014/05/07 职场文书
食品流通安全承诺书
2014/05/22 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
置业顾问岗位职责
2015/02/09 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android