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 常用的crud操作语句
Jun 20 MongoDB
浅析MongoDB之安全认证
Jun 26 MongoDB
mongodb数据库迁移变更的解决方案
Sep 04 MongoDB
阿里云服务器部署mongodb的详细过程
Sep 04 MongoDB
MongoDB日志切割的三种方式总结
Sep 15 MongoDB
MongoDB连接数据库并创建数据等使用方法
Nov 27 MongoDB
一次线上mongo慢查询问题排查处理记录
Mar 18 MongoDB
MongoDB支持的索引类型
Apr 11 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
PHP利用COM对象访问SQLServer、Access
2006/10/09 PHP
php对称加密算法示例
2014/05/07 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
Javascript 类与静态类的实现
2010/04/01 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
使用Python神器对付12306变态验证码
2016/01/05 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
python可视化篇之流式数据监控的实现
2019/08/07 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
一套带网友答案的.NET笔试题
2016/12/06 面试题
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
毕业生个人求职信范例分享
2013/12/17 职场文书
教师绩效考核方案
2014/01/21 职场文书
电焊工岗位职责
2014/03/06 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
社会实践评语
2014/04/28 职场文书
学习与创新自我评价
2015/03/09 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS