mongoDB数据库索引快速入门指南
目录
- MongoDB 索引
- 1. 开始与准备数据
- 2. 创建索引前
- 3. 创建索引 createIndex
- 4. 创建索引后
- 6.唯一索引与符合索引
- ①唯一索引
- ②复合索引
MongoDB 索引
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
mongo可以通过创建索引来提高查询的速度
1. 开始与准备数据
启动mongo并选择目标数据库
mongo
use test
然后准备一组数据(10万条数据,较大的数据量)
for(i=0;i<100000;i++){db.test.insert({name:'test'+i,age:i})}
2. 创建索引前
查询一下name为"test90000"的数据。并使用explain方法来查看查询的性能。
db.test1.find({name:"test90000"}).explain('executionStats')
这里可以看到查询花了53毫秒
3. 创建索引 createIndex
给字段name创建索引
db.test1.createIndex({name: 1})
查看索引:
给name创建索引之前,_id字段默认为索引,创建后集合有两个索引,"_id"和"name"。
4. 创建索引后
再次查找该条数据,并查看查询的性能,发现所用时间接近0毫秒。即设定索引后查询性能大大提升了。
db.test1.find({name:"test90000"}).explain('executionStats')
5. 删除索引
db.test1.dropIndex({name:1})
查看之
db.test1.getIndexes()
如图,只剩下了"_id"一个索引。"name"索引已被删除。
6.唯一索引与符合索引
①唯一索引
db.test1.createIndex({name: 1},{"unique":true})
查看索引
db.test1.getIndexes()
可以看到,unique为true。
设定为唯一索引后,该索引的值不能重复。
(这个特点也可以用于写爬虫时不想要某字段的重复数据时,达到去重的目的。)
如图插入一条name重复的数据时,会产生如下报错:
即插入失败了。
②复合索引
创建多个索引的方式被称为复合索引。
首先删掉刚刚创建的索引name
db.test1.dropIndex({name:1})
然后一次创建name,age两个索引
db.test1.createIndex({'name':1,'age':1})
处理海量数据时,在一定的规则下使用复合索引,可以大幅提升查询的性能。具体比较复杂,这里不再详解。
相关推荐
-
MongoDB通配符索引的用法实例
指南 MongoDB在4.2 版本推出了Wildcard Indexes,究竟什么是Wildcard Indexes以及Wildcard Indexes适合哪些场景本文结合官方文档以及实际测试进行简单概述. 1.通配符索引示例 因为MongoDB是dynamic schemas,所以应用是可以查询任何已知字段或者随机字段的. 假设(此假设案例摘自官方文档),集合colA的UserMetadata字段包含如下数据: { "userMetadata" : { "likes&quo
-
MongoDB中哪几种情况下的索引选择策略
目录 一.MongoDB如何选择索引 二.数据准备 三.正则对index的使用 四.$or从句对索引的利用 五.sort对索引的利用 六.搜索数据对索引命中的影响 总结 一.MongoDB如何选择索引 如果我们在Collection建了5个index,那么当我们查询的时候,MongoDB会根据查询语句的筛选条件.sort排序等来定位可以使用的index作为候选索引:然后MongoDB会创建对应数量的查询计划,并分别使用不同线程执行查询计划,最终会选择一个执行最快的index:但是这个选择也不是一
-
关于对MongoDB索引的一些简单理解
目录 索引简介 1.语法准备 2.数据准备: 3.索引 3.1 唯一索引 3.2 单键索引 3.3 多键索引 3.4 复合索引 3.5 交叉索引 3.6 部分索引 3.7覆盖索引 3.8 全文索引 4.索引限制 4.1 查询限制 4.2 范围限制 总结 索引简介 索引可以提升文档的查询速度,但建立索引的过程需要使用计算与存储资源,在已经建立索引的前提下,插入新的文档会引起索引顺序的重排. MongoDB 的索引是基于 B-tree 数据结构及对应算法形成的.树索引存储特定字段或字段集的值,按字段
-
MongoDB中的定时索引示例详解
MongoDB中存在一种索引,叫做TTL索引(time-to-live index,具有生命周期的索引),这种索引允许为每一个文档设置一个超时时间.一个文档达到预设置的老化程度后就会被删除. 数据到期对于某些类型的信息非常有用,例如机器生成的事件数据,日志和会话信息,这些信息只需要在数据库中保存有限的时间. 在createIndex中指定expireAfterSeconds选项就可以创建一个TTL索引: // 超时时间为24小时,默认是前台运行,可以通过background:true设置为后台模
-
mongoDB数据库索引快速入门指南
目录 MongoDB 索引 1. 开始与准备数据 2. 创建索引前 3. 创建索引 createIndex 4. 创建索引后 6.唯一索引与符合索引 ①唯一索引 ②复合索引 MongoDB 索引 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录. 这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的. 索引是特殊的数据结构,索引存储在一个易于遍历读取的数
-
Spring Boot 快速入门指南
最近因为项目的缘故,需要接触 Spring Boot,详细的介绍可以参考官方的文档,这里主要根据自己学习的实践进行简单分享.版本:1.3.6 简介 Spring 框架是非常著名的 Java 开源框架,历经十多年的发展,整个生态系统已经非常完善甚至是繁杂,Spring Boot 正是为了解决这个问题而开发的,为 Spring 平台和第三方库提供了开箱即用的设置,只需要很少的配置就可以开始一个 Spring 项目.当然,建议使用 Java 8 来进行开发. Spring Boot 实际上走的是 Se
-
Oracle RMAN快速入门指南
正在看的ORACLE教程是:Oracle RMAN快速入门指南.前言: 这篇文章主要介绍RMAN的常用方法,其中包含了作者一些自己的经验,里面的实验也基本全在WIN 2K和ORACLE 8.1.6环境下测试成功(因为这个环境比较容易实现). 本文借鉴了网上一些高手的相关文章,希望大侠们不要见怪,此处一并谢过. 这篇文章主要是在北京出差期间写的,回到家后整理修改了一下,时间比较仓促,同时因为篇幅有限,一些技术细节不能一一覆盖了,只希望能够帮助新手入门的作用,想真正熟练掌握RMAN,必须经过较长时间
-
MongoDB数据库索引用法详解
一.索引详讲 索引是什么,索引就好比一本书的目录,当我们想找某一章节的时候,通过书籍的目录可以很快的找到,所以适当的加入索引可以提高我们查询的数据的速度. 准备工作,向MongoDB中插入20000条记录,没条记录都有number和name > for(var i = 0 ; i<200000 ;i++){ ... db.books.insert({number:i,name:"book"+i}) ... } WriteResult({ "nInserted&qu
-
SpringBoot+Vue项目新手快速入门指南
目录 1. 项目技术选型 2.数据库设计 3. 后台搭建 3.1 引入依赖 3.2 swagger配置 3.3实体类 3.4 自动填充配置 3.5 Mapper 3.6 service 3.7 controller 4. 前端搭建 4.1 环境搭建 4.1.1 Node环境 4.1.2 项目构建 4.1.3 安装插件 4.1.4 引入插件 4,2.搭建路由 4.3. echarts使用 4.4 element-ui使用 总结 前言:本人目前从事java开发,但同时也在学习各种前端技术,下面是我做
-
基于MongoDB数据库索引构建情况全面分析
前面的话 本文将详细介绍MongoDB数据库索引构建情况分析 概述 创建索引可以加快索引相关的查询,但是会增加磁盘空间的消耗,降低写入性能.这时,就需要评判当前索引的构建情况是否合理.有4种方法可以使用 1.mongostat工具 2.profile集合介绍 3.日志 4.explain分析 mongostat mongostat是mongodb自带的状态检测工具,在命令行下使用.它会间隔固定时间获取mongodb的当前运行状态,并输出.如果发现数据库突然变慢或者有其他问题的话,首先就要考虑采用
-
SQLite快速入门指南
1. 介绍 SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二进制文件存在即可开始创建.连接和使用数据库.如果您正在寻找一个嵌入式数据库项目或解决方案,SQLite是绝对值得考虑. 2. 安装 SQLite on Windows 进入 SQL 下载页面:http://www.sqlite.org/
-
Python中定时任务框架APScheduler的快速入门指南
前言 大家应该都知道在编程语言中,定时任务是常用的一种调度形式,在Python中也涌现了非常多的调度模块,本文将简要介绍APScheduler的基本使用方法. 一.APScheduler介绍 APScheduler是基于Quartz的一个python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务. APScheduler提供了多种不同的调度器,方便开发者根据自己的实际需要进行使用:同时也提供了不同的存储机
-
react-router-dom6(对比 router5)快速入门指南
目录 React Router 6 快速上手 1.概述 2.基本使用 3.重定向 4.NavLink高亮 5.useRoutes路由表 6.嵌套路由(Outlet) React Router 6 快速上手 在之前的文章中,我们已经学习了react-router-dom v5的内容,在react-router-dom v6版本中,对旧版本的API以及一些组件做了些许修改.本文开始,我将带大家学习最新的react-router-dom v6版本的路由知识,并且会与v5老版本进行一些对比. 需要学习r
-
Python语法快速入门指南
Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 在本章中我们将来学习Python的基础语法,让你快速学会Python编程. 第一个Python程序 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: $ python Python 2.7.6 (default, Sep 9 2014, 15:04:36) [GCC 4.2.1
随机推荐
- Basic求10000以内的完美数
- oracle数据库定时任务dbms_job的用法详解
- JavaScript中统计Textarea字数并提示还能输入的字符
- android中实现背景图片颜色渐变方法
- 《解剖PetShop》之一:PetShop的系统架构设计
- ASP.NET中CKEditor与CKFinder的配置使用
- 使用getBoundingClientRect方法实现简洁的sticky组件的方法
- 微信小程序 简单DEMO布局,逻辑,样式的练习
- ASP.NET MVC5网站开发管理列表、回复及删除(十三)
- c#使用netmail方式发送邮件示例
- MySQL5.6主从复制(mysql数据同步配置)
- js实现表单及时验证功能 用户信息立即验证
- js jquery获取当前元素的兄弟级 上一个 下一个元素
- asp汉字中文图片验证码的实现代码
- java实现163邮箱发送邮件到qq邮箱成功案例
- Redis的11种Web应用场景简介
- oracle使用instr或like方法判断是否包含字符串
- 搜索引擎优化应该重视什么?
- 在ubuntu中部署samba服务器的方法
- PHP实现提高SESSION响应速度的几种方法详解