MongoDb 大数据查询优化、 MongoDB 索引、复合索引、唯一索引、 explain 分 析查询速度

一、索引基础

索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。
MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧。

下面是创建索引的命令:

 db.user.ensureIndex({"userame":1}) 

获取当前集合的索引:

db.user.getIndexes() 

在这里插入图片描述

删除索引的命令是:

db.user.dropIndex({"username":1})

在 MongoDB 中,我们同样可以创建复合索引,
如:
数字 1 表示 username 键的索引按升序存储,
数字 -1 表示 age 键的索引按照降序方式存储。

db.user.ensureIndex({"username":1, "age":-1})

该索引被创建后,基于 username 和 age 的查询将会用到该索引,或者是基于 username 的查询也会用到该索引,但是只是基于 age 的查询将不会用到该复合索引。

因此可以说, 如果想用到复合索引,必须在查询条件中包含复合索引中的前 N 个索引列。

然而如果查询 条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB 可以智能的帮助我们调 整该顺序,以便使复合索引可以为查询所用。
如:

db.user.find({"age": 30, "username": "stephen"}) 

对于上面示例中的查询条件,MongoDB 在检索之前将会动态的调整查询条件文档的顺 序,以使该查询可以用到刚刚创建的复合索引

在这里插入图片描述
对于上面创建的索引,MongoDB 都会根据索引的 keyname 和索引方向为新创建的索引 自动分配一个索引名,
下面的命令可以在创建索引时为其指定索引名,如:

 db.user.ensureIndex({"username":1},{"name":"userindex"})

随着集合的增长,需要针对查询中大量的排序做索引。如果没有对索引的键调用 sort, MongoDB 需要将所有数据提取到内存并排序。因此在做无索引排序时,如果数据量过大以 致无法在内存中进行排序,此时 MongoDB 将会报错。

在这里插入图片描述
在这里插入图片描述

二、唯一索引

在缺省情况下创建的索引均不是唯一索引。
下面的示例将创建唯一索引,如:

 db.user.ensureIndex({"userid":1},{"unique":true}) 

如果再次插入 userid 重复的文档时,MongoDB 将报错,以提示插入重复键,
如:

db.user.insert({"userid":5}) db.user.insert({"userid":5})

E11000 duplicate key error index: user.user.$userid_1 dup key: { : 5.0 }

如果插入的文档中不包含 userid 键,那么该文档中该键的值为 null,如果多次插入类似 的文档,MongoDB 将会报出同样的错误,如:

 db.user.insert({"userid1":5}) db.user.insert({"userid1":5})

E11000 duplicate key error index: user.user.$userid_1 dup key: { : null }

如果在创建唯一索引时已经存在了重复项,我们可以通过下面的命令帮助我们在创建唯 一索引时消除重复文档,仅保留发现的第一个文档,如:

先删除刚刚创建的唯一索引。

db.user.dropIndex({"userid":1})

插入测试数据,以保证集合中有重复键存在。

 db.user.remove() db.user.insert({"userid":5}) db.user.insert({"userid":5}) 

重新创建唯一索引

db.user.ensureIndex({"userid":1},{"unique":true })

在这里插入图片描述
我们同样可以创建复合唯一索引,即保证复合键值唯一即可。如:

db.user.ensureIndex({"userid":1,"age":1},{"unique":true})

三、索引的一些参数

在这里插入图片描述
如果在为已有数据的文档创建索引时,可以执行下面的命令,以使 MongoDB 在后台创 建索引,这样的创建时就不会阻塞其他操作。但是相比而言,以阻塞方式创建索引,会使整 个创建过程效率更高,但是在创建时 MongoDB 将无法接收其他的操作。

db.user.ensureIndex({"username":1},{"background":true})

四、使用 explain

explain 是非常有用的工具,会帮助你获得查询方面诸多有用的信息。只要对游标调用 该方法,就可以得到查询细节。explain 会返回一个文档,而不是游标本身。如:
在这里插入图片描述
explain 会返回查询使用的索引情况,耗时和扫描文档数的统计信息。

五、explain executionStats 查询具体的执行时间

db.tablename.find().explain( "executionStats" ) 

关注输出的如下数值:explain.executionStats.executionTimeMillis

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ipconfig不是内部或外部_晶振有什么作用,如何选择合适的晶振,为什么有时候用内部晶振?...

一、 什么是晶振晶振,全名叫"晶体振荡器",它在电路当中起到产生振荡频率的作用,我们都知道,单片机可以看成是在时钟驱动下的时序逻辑电路,那么这个所需要的时钟就是晶振来产生,可以说它的单片机的…

Mongodb 账户权限配置

Mongodb 账户权限配置 1、第一步创建超级管理用户 use admindb.createUser({ user:admin, pwd:admin, roles:[{role:root,db:admin}] })2、第二步修改 Mongodb 数据库配置文件 默认路径:路径:C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg 打开…

笔记本电脑关机快捷键_2020年双十一值得入手的高性价比笔记本电脑外设推荐...

本文更新日期:2020.10.21 篇幅较长,请提前收藏关注电脑外设就是除主机外的大部分硬件设备都可称作外部设备,或叫外围设备,简称外设。计算机系统没有输入输出设备,就如计算机系统没有软件一样,是毫无意义的。…

MongoDB 的高级查询 aggregate 聚合管道

一、MongoDB 聚合管道&#xff08;Aggregation Pipeline&#xff09; 使用聚合管道可以对集合中的文档进行变换和组合。 实际项目&#xff1a;表关联查询、数据的统计。 MongoDB 中使用 db.COLLECTION_NAME.aggregate([{<stage>},...]) 方法 来构建和使用聚合管道。 先…

python函数在传参的时候,到底在传些什么?

C这样的语言用多了之后&#xff0c;在Python函数传递参数的时候&#xff0c;经常会遇到一个问题&#xff0c;我要传递一个引用怎么办&#xff1f; 比如我们想要传一个x到函数中做个运算改变x的值&#xff1a; def change(y):y 1x 1 print ("before change:", x) …

android学习笔记五。2、其他组件

一、ContentProvider内容提供者.是是android中一个应用向第三方共享数据的方式,android中的联系人,sms(短信记录)等都是通过这一方式来向外提供的 1、使用&#xff1a; 在应用中使用ContentProvider提供的数据并不是直接使用的,而是需要通过ContentResolver来实现的,ContentRes…

一维条形码识别c语言_条形码的优点

条形码是迄今为止最经济、实用的一种自动识别技术。条形码技术具有以下几个方面的优点A&#xff0e;输入速度快&#xff1a;与键盘输入相比&#xff0c;条形码输入的速度是键盘输入的5倍&#xff0c;并且能实现“即时数据输入”。B&#xff0e;可靠性高&#xff1a;键盘 输入数…

气象数据领航无人飞行器线路优化大赛解决方案(3rd place)

1 队伍介绍 队伍名称&#xff1a;酒后写诗 队伍成员&#xff1a;陈权、林望黎、黄章炜 队伍名次&#xff1a;3 / 1646 2 问题简介 这个问题说起来其实挺简单&#xff08;但实现起来困难重重&#xff09;&#xff0c;就是提供了气象局得到的10个模型的预测数据&#xff08;…

mac最好用的markdown_「建议收藏」PCMaclinux,最好用Markdown编辑器清单

文章很长&#xff0c;不想看&#xff0c;请直接拉到底看简略版清单&#xff01;&#xff01;如果您曾经用Word写过文章&#xff0c;并尝试将文本移动到CMS中(头条、百家号等)&#xff0c;那么您可能已经花费了大量时间&#xff0c;来调整这种跨平台转换导致的格式杂乱。因此&am…

Nodejs 操作 MongoDb 数据库

一、在 Nodejs 中使用 Mongodb 在前面的博文我们给大家讲了如何使用命令操作 Mongodb&#xff0c;这篇博文开始我们给大家讲解一 下如何使用 Nodejs 来操作 Mongodb 数据库 Nodejs 操作 mongodb 数据库官方文档&#xff1a;https://www.mongodb.org.cn/drivers/5.html npm i…

机智的ensemble

1 引言 本文主要结合了李宏毅的机器学习课程之Ensemble和周志华的《机器学习》西瓜书两者的说法&#xff0c;对ensemble这一竞赛利器做了总结。 Ensemble主要可以分为bagging和boosting两种方法。其中&#xff0c;bagging适用于基模型复杂度比较高的情况&#xff08;如树模型…

Linux的sort命令

Linux的sort命令 Linux的sort命令就是一种对文件排序的工具&#xff0c;sort命令的功能十分强大&#xff0c;是Shell脚本编程时常使用的文件排序工具。 sort命令将输入文件看做由多条记录组成的数据流&#xff0c;而记录由可变宽度的字符串组成&#xff0c;以换行符作为定界符。…

delphi 调用php接口_爱站权重查询 API 接口请求调用

爱站权重查询 API 接口在网上已经很多且大都封装成了 API 供别人调用。支持前台跨域请求&#xff0c;以GET/POST方式提交即可。爱站权重查询 API 接口可以查询百度权重、搜狗等级、360权重、神马权重、谷歌等级等&#xff0c;你可以选择调用本站的接口&#xff0c;也可以利用本…

Express 路由、Ejs 、静态文件托管、中间件

一、 Express 简单介绍 Express 是一个基于 Node.js 平台&#xff0c;快速、开放、极简的 web 开发框架&#xff0c;它提供一系 列强大的特性&#xff0c;帮助你创建各种 Web 和移动设备应用。 Express 官网&#xff1a; 英语官网&#xff1a;http://expressjs.com/中文官网…

相邻位数字差值的绝对值不能超过_热点争议中技术问题,伺服控制有几个零点?对应真绝对值多圈编码器意义...

回归技术&#xff0c;把技术问题单独挑出来讲透&#xff0c;争要争个明白&#xff0c;看要看得明白。技术就能越辩越明。如果有“真”与“假”之争&#xff0c;沉默不去争&#xff0c;就是让“真的”受伤&#xff0c;让真心实干的人受伤。伺服控制有三个零点&#xff0c;对应三…

Chapter1-1_Speech_Recognition(Overview)

文章目录1 古人看语音辨识2 什么是语音辨识2.1 输出部分 - Token2.2 输入部分 - 声音信号特征3 数据集4 模型本文为李弘毅老师【Speech Recognition - Overview】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自…

[Swift]loadNibNamed方法

我们自定义UITableViewCell的时候&#xff0c;经常会创建一个xib文件。 &#xff08;注意&#xff1a;选择创建文件要继承于cocoa touch class&#xff0c;而不是cocoa class&#xff0c;否则你是选不了创建xib的&#xff01;&#xff01;&#xff01;&#xff09; 然后我们可以…

Express Cookie 的基本使用

一、Cookie 简介 ● cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域 名的时候共享数据。 ● HTTP 是无状态协议。简单地说&#xff0c;当你浏览了一个页面&#xff0c;然后转到同一个网站的另一个页 面&#xff0c;服务器无法认识到这是同一个…

Chapter1-2_Speech_Recognition(LAS)

文章目录1 内容简述2 模型详述2.1 ListenRNN Encoder1D-CNN EncoderSelf-attentinon EncoderDown Sampling2.2 Attend2.3 Spell2.4 Beam Search2.5 Training2.6 Back to Attention本文为李弘毅老师【Speech Recognition - Listen, Attend, Spell】的课程笔记&#xff0c;课程视…

智能车的转弯部分_江西智能搬运平板车铁路轨道运输车-厂家直销

本公司致力发展搬运设备&#xff0c;从公司成立至今一直在做电动平车的研发&#xff0c;从几十千克自动化物流车到成百上千吨都能自行研发制造&#xff0c;取得了优异的业内好评和广大消费者的肯定&#xff01; BWP型无轨平板车是一种使用特殊的行走机构&#xff0c;能够在较小…