一幅长文细学MongoDB(四)——索引

4 索引

文章目录

  • 4 索引
    • 4.1 概述
    • 4.2 索引类型
    • 4.3 索引创建
    • 4.3 删除索引
    • 4.4 查看索引执行计划
    • 4.5 涵盖的查询

4.1 概述

说明:索引支持在MongoDB中高效地查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别是处理大量的数据时,查询可以花费几十秒甚至几分钟,这对网站的性能是十分致命的。

适当地建立索引可以提升扫描的效率。MongoDB采用的索引为B树索引。


4.2 索引类型

单字段索引:MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引,称为单字段索引(Single Field Index)

复合索引

地理空间索引


4.3 索引创建

创建索引

db.集合名.createIndex({KEY:1},参数);
或
db.集合名.ensureIndex({KEY:1},参数);

其中参数选项为:

ParameterTypeDescription
backgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false
uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDupsBoolean在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
sparseBoolean对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSecondsinteger指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
vindex version索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weightsdocument索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_languagestring对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_overridestring对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

查看索引

db.集合名.find().pretty();

image-20220920182111389


4.3 删除索引

索引删除

db.集合名.dropIndex(索引名称)

image-20220920182805085


4.4 查看索引执行计划

执行计划:一个索引建立在字段上后是否被使用我们是不知道的,此时通过下面的命令可以查看在查询过程中是否使用了索引进行查询,通过winningPlan的stage查看其扫描使用的方式。

db.集合名.find(条件).explain(参数)

4.5 涵盖的查询

说明:当查询条件和查询的投影仅包括索引的字段时,MongoDB直接从索引返回结果,而无需扫描任何文档或将文档带入内存;这种查询的方式显得十分高效。

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

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

相关文章

【转】Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]

Fresco简单的使用—SimpleDraweeView 百学须先立志—学前须知: 在我们平时加载图片(不管是下载还是加载本地图片…..)的时候,我们经常会遇到这样一个需求,那就是当图片正在加载时应该呈现正在加载时的图像,当图片加载失败时应该呈…

对象映射工具AutoMapper介绍

AutoMapper是用来解决对象之间映射转换的类库。对于我们开发人员来说,写对象之间互相转换的代码是一件极其浪费生命的事情,AutoMapper能够帮助我们节省不少时间。 一. AutoMapper解决了什么问题? 要问AutoMapper解决了什么问题? 难道不是对象…

MindSpore安装教程【简洁易懂】

1 官网 MindSpore官网:MindSpore安装指南 2 关注社区 3 下载 查看自己python版本:使用python -V查看自己python版本 进入官网选择相应配置: 验证是否安装成功:python -c "import mindspore;mindspore.run_check()"&a…

php文件操作基本使用方法

<?php/* $fpfopen("tmp.html","r");$strfread($fp,filesize("tmp.html"));$strstr_replace("{title}",新标题,$str);$strstr_replace("{content}",新内容,$str); fclose($fp); $handlefopen(new.html,w); fwrite($handl…

一幅长文细学Vue(十三)——组合式中的生命周期

13 组合式API&#xff08;四&#xff09; 摘要&#xff1a;每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听&#xff0c;编译模板&#xff0c;挂载实例到 DOM&#xff0c;以及在数据改变时更新 DOM。在此过程中&#xff0c;它也会运行被…

NodeJs实现自定义分享功能,获取微信授权+用户信息

最近公司搞了个运营活动&#xff0c;入口放在了微信公众号里&#xff0c;好久没碰过微信了&#xff0c;刚拾起来瞬间感觉有点懵逼。。。。似乎把之前的坑又都重新踩了一遍&#xff0c;虽然过程曲折&#xff0c;不过好在顺利完成了&#xff0c;而且印象也更加深刻了&#xff0c;…

git的简单理解及基础操作命令

前端小白一枚&#xff0c;最近开始使用git&#xff0c;于是花了2天看了廖雪峰的git教程(偏实践&#xff0c;对于学习git的基础操作很有帮助哦)&#xff0c;也在看《git版本控制管理》这本书(偏理论&#xff0c;内容完善&#xff0c;很不错)&#xff0c;针对所学内容建了git仓库…

iOS 后台挂起的一些坑

特别说明&#xff1a;后台状态&#xff1a;当前app如果不是作为屏幕中的第一层&#xff0c;呈现显示给用户&#xff0c;那么此时app就是后台状态。锁屏&#xff08;包括&#xff1a;当前应用下锁屏、其他应用下锁屏、桌面锁屏&#xff09; 用户在使用其他应用app2&#xff0c;…

OSGI 生命周期

1 生命周期管理 对于非模块化应用&#xff0c;生命周期将应用作为一个整体来操作&#xff1b;而对于模块化应用&#xff0c;则可以以细粒度的方式来管理应用的某一个独立部分。OSGi生命周期管理 OSGi生命周期层有两种不同的作用&#xff1a; 在应用程序外部&#xff0c;定义了对…

tomcat+nginx+redis实现均衡负载、session共享

在项目运营时&#xff0c;我们都会遇到一个问题&#xff0c;项目需要更新时&#xff0c;我们可能需先暂时关闭下服务器来更新。但这可能会出现一些状况:1.用户还在操作&#xff0c;被强迫终止了(我们可以看日志等没人操作的时候更新&#xff0c;但总可能会有万一)2.不知道的用户…

洛谷 P3184 [USACO16DEC]Counting Haybales数草垛

洛谷 P3184 [USACO16DEC]Counting Haybales数草垛 题目描述 Farmer John has just arranged his NN haybales (1 \leq N \leq 100,0001≤N≤100,000 ) at various points along the one-dimensional road running across his farm. To make sure they are spaced out appropria…

关于笔试的一些博客

这里收集了一些阿里的网上笔试题目 阿里笔试题(2015)持续更新中腾讯阿里实习生招聘笔试总结阿里2014研发实习生笔试题解析【阿里】算法工程师笔试题整理&#xff08;13&14年&#xff09;【阿里】算法工程师笔试【2015.04.02】转载于:https://www.cnblogs.com/chen310/p/438…

Entity Framework 6 Recipes 2nd Edition(13-2)译 - 用实体键获取一个单独的实体

问题 不管你用DBFirst,ModelFirst或是CodeFirst的方式,你想用实体键获取一个单独的实体.在本例中,我们用CodeFirst的方式. 解决方案 假设你有一个模型表示一个Painting(绘画)类型的实体,如Figure 13-2所示: Figure 13-2. The Painting entity type in our model 在代码In Listi…

C#心得与经验(二)

本周学到很多C#关于Interface, Array的知识&#xff0c;在这里简单复习一下几个易混的地方&#xff0c;重在理解。 一、Interface 使用as来避免多态时没有接口的Exception&#xff1a; Document [] folder new Document[5]; for (int i 0; i < 5; i) {if (i % 2 0){fold…

java实例化对象

摘要&#xff1a;分享牛&#xff0c;分享牛分享&#xff0c;java类加载机制&#xff0c;java实例化对象&#xff0c;java实例化对象机制&#xff0c;java基础。 java是如何实例化对象的呢&#xff1f;以及实例化对象的先后顺序是什么&#xff1f;下面我们以测试的方式说明. 1.1…

项目总结(3.28)

项目是用vuewebpackelementUI 完成的。虽然没有什么深奥的技术和难点&#xff0c;但是有些细节还是值得注意的。 1、满足不同屏幕尺寸下缩放全屏显示。 单单只靠宽度、高度百分比是不可以实现的&#xff0c;比如如果宽度设置百分比&#xff0c;当屏幕宽度比较小时&#xff0c;这…

Android开发删除短信

本人一直有一个需求&#xff0c;想要手机自动拦截黑名单里联系人的信息并自动删除这些短信&#xff0c;手机管家之类的软件可以拦截但是没找到能删除这些短信的&#xff0c;于是就萌生了想自己写一个android软件的想法。 加上物联网的兴起&#xff0c;安卓设备开发肯定前景很好…

让你提升命令行效率的 Bash 快捷键 [完整版]

生活在 Bash shell 中&#xff0c;熟记以下快捷键&#xff0c;将极大的提高你的命令行操作效率。 编辑命令 Ctrl a &#xff1a;移到命令行首Ctrl e &#xff1a;移到命令行尾Ctrl f &#xff1a;按字符前移&#xff08;右向&#xff09;Ctrl b &#xff1a;按字符后移&…

Okhttp的封装和回调

public class HttpUtil {static HttpUtil util;private final OkHttpClient client;// 私有化构造方法private HttpUtil(){client new OkHttpClient();}public static HttpUtil getInstance(){if(util null){synchronized (HttpUtil.class){util new HttpUtil();}}return u…

将Session写入Memcache

通过session_set_save_handler()方法自定义Session写入Memcache 1 <?php 2 class MemSession{3 private static $handler null;4 private static $lifetime null;5 private static $time null;6 const MS session;7 8 …