【MongoDB】(一)——关于MondoDB索引的总结

2023-05-16

导读

为数据创建索引有助于提高查询数据的性能,本篇文章总结了创建MongoDB索引应遵循的规则。

我将这些规则分成四类

1.“query”
2.“sort”
3.“RAM”
4.“selectivity”

query

db.collection.find({})

  这一部分主要针对查询中的query部分,也就是find操作,说明我们如何创建索引,以及什么样的查询能够使该索引有效。
  
  【总的规则】:索引中包含find中的全部字段
  【具体规则】:
         1.如果所有查询都使用了同样的,唯一的字段,则创建只包含一个字段的索引。
        【举例】:db.collection.find({x:”}),那么索引就是{x:1}
         
         2.创建复合索引来支持包含多个字段的查询。复合索引支持查询中有全部索引字段或其子集(从开头算起的子集,类似于前缀一样的东西)的查询。         
        【举例】:如果索引是{x:1,y:1,Z:1},那么它支持find的查询条件为{x:”},{x:”,y:”}以及{x:”,y:”,z:”}

【注意】:这里的子集,有些不同于数学中的子集。这里的子集有个专业名称Index Prefix,索引前缀,所以暗含了是从前往后,是有顺序的。可以把索引看成一个单词,然后Index Prefix就是从前往后截取索引中的部分。

            这里写图片描述

sort

db.collection.find().sort({})

  这一部分主要针对查询中的sort部分,说明针对要排序的字段,我们应该如何创建索引,或者说如何排序才能使创建的索引有效。

【规则】:
     1.如果索引是唯一字段,查询中的sort也使用该字段,那么无论是升序还是降序,索引都有效。
     【举例】:如果索引是{x:1},sort({x:1})或({x:-1})都可以。
     
     2.如果索引是复合字段,那么sort中字段的排序方向(升序或降序)和要和索引完全一致,或每个字段都和索引相反。
     【举例】:如果索引是{x:1,y:-1},那么sort({x:1,y:-1})或者sort({x:-1,y:1})
     
     3.如果索引是复合字段,且查询中的sort部分的字段如果是是索引中的全部字段或子集(同上面的意思一致),那么find()中的字段满足上一部分我们说的query的第2条规则:复合索引支持查询中有全部索引字段或其子集(从开头算起的子集,类似于前缀一样的东西)的查询。
     
     4.如果索引是符合字段,但是查询中的sort部分的字段不是索引的全部字段或子集,这个时候find中的字段,必须是sort中字段在索引中其位置之前的字段。
     【举例】:索引是{x:1,y:1,z:1},如果sort({y:1}),那么find必须是索引中y之前的字段,包括y,即({x:1,y:1})

RAM

  index的大小需要小于RAM的大小,才能避免从磁盘中查询。
  计算index的大小:

db.collection.totalIndexSize()

  实际当中,应计算所有collection上index的大小,并使RAM大于index大小总和。
  

selectivity

  在创建索引时,要保证尽可能高的可选择性,不要创建了索引之后,仍需要扫描整个collection。
比如collection中有个字段是Status,该字段的值就‘A’(Active)或‘D’(Delete),这个时候如果索引是该字段的话,就会是很低的选择性,这个时候,可以结合另一个字段来创建索引,或者让Status的值分布更广泛些。

导图总结

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【MongoDB】(一)——关于MondoDB索引的总结 的相关文章

  • CMakeLists.txt----一点儿自己的经验教训

    被CMakeLists txt坑过数次 xff08 大多是被自己蠢哭 xff09 xff0c 把用过的命令稍微记一下 注意 xff1a 中文空格等什么诡异字符 xff0c 链接库的名字不要忘记 xff0c 不要写错 好记性不如烂键盘 xff
  • docker命令之push

    1 背景 NAME docker push Push an image or a repository to the registry SYNOPSIS docker push NAME TAG DESCRIPTION Push an im
  • C标准库源码解剖(4):字符串处理函数string.h和wchar.h

    string h中包含了所有的字符串处理函数 xff0c 也包含了内存处理函数 xff0c 因为这些内存处理函数 xff08 如比如 复制 搜索 xff09 的功能与字符串处理函数功能类似 我们是用通用指针来指向内存块的 xff0c 通用指
  • VS 2019 + Clang-Format

    VS 2019配置Clang Format Clang Format选项 span class token comment 语言 None Cpp Java JavaScript ObjC Proto TableGen TextProto
  • C语言bmp图片读取写入

    一 介绍 bmp是我们常用的一种图片格式 xff0c 这里用c语言写一个程序打开 xff0c 读取像素点然后增亮 增亮公式 y 61 kx 43 b 这里用的24位的真彩bmp图片 二 实现 img bmp c span class tok
  • 树莓派设置wifi自动连接

    1 sd卡烧录好镜像 2 在boot目录创建 wpa supplicant conf 内容 span class token assign left variable ctrl interface span span class token
  • 电路城 电路方案 51单片机开发板(原理图+PCB+学习程序源文件)

    1 89C52单片机 xff0c 支持USB口或者是串口两种下载程序方式 xff1b 2 6位数码管 xff08 做动态扫描及静态显示实验 xff09 3 8位LED发光二极管 xff08 做流水灯实验 xff09 4 MAX232芯片RS
  • 信息系统开发与管理

    信息化是这个时代的主旋律 xff0c 如何执她之手 xff0c 跟上她的节拍 xff0c 不掉队 xff0c 我相信 xff0c 聪明的读者 xff0c 你的答案一定跃然于心底 一本 信息系统开发与管理 xff0c 结合学生信息管理系统 x
  • 在与SQL Server建立连接时出现与网络相关的或特定于实例的错误

    向往前一样 xff0c 学习牛腩新闻发布系统的视频 xff0c 敲代码 xff0c 打开数据库 xff0c 出现一个框框 xff0c 详细内容如下 xff1a 数据库连接不上 xff0c 所有的工作都要歇班 xff0c 捣鼓了会儿 xff0
  • Sql Server服务远程过程调用失败

    由于开发系统 xff0c 需要vs版本统一 xff0c 于是经过了昨天一整天艰苦卓绝的斗争 xff0c 小编终于成功的写在了13版本的vs xff0c 重新装上了12版本的vs xff0c 本来想着 xff0c 12版本的vs搭建成功了 x
  • Android仿淘宝购物车demo

    夏的热情渐渐退去 xff0c 秋如期而至 xff0c 丰收的季节 xff0c 小编继续着实习之路 xff0c 走着走着 xff0c 就走到了购物车 xff0c 逛过淘宝或者是京东的小伙伴都知道购物车里面的宝贝可不止一件 xff0c 对于爱购
  • Android Demo---实现从底部弹出窗口

    在前面的博文中 xff0c 小编简单的介绍了如何制作圆角的按钮以及圆角的图片 xff0c 伴着键盘和手指之间的舞步 xff0c 迎来新的问题 xff0c 不知道小伙伴有没有这样的经历 xff0c 以App为例 xff0c 点击头像的时候 x
  • 浅谈如何带领好一个团队

    实习回来之后 xff0c 小编接手了一个新的项目 xff0c 市委组织部考核项目 xff0c 听着有没有很高大上 xff0c 因为这个项目是给国家机关做的 xff0c 跟他们打交道 xff0c 小编的心情只能用两个字来形容 xff0c 呵呵
  • 为什么说slam技术不等于智能导航?

    在机器人智能移动中 xff0c SLAM发挥了无可比拟的作用 xff0c SLAM simultaneous localization and mapping 也称为CML Concurrent Mapping and Localizati
  • 情不知所起,一“网”而深

    你只看到我的程序 xff0c 却没有看到背后的代码 xff1b 你有你的选择 xff0c 我有我的坚持 xff1b 你嘲笑我假期过节不回家陪父母 xff0c 我可怜你只在家向父母衣食伸手 xff1b 你可以轻视我的道路 xff0c 我会证明
  • 【项目实战】---首页一级分类的显示

    在前面的博文中 xff0c 小编主要简单的介绍了用户模块中的验证码程序是如何实现的 xff0c 今天继续来介绍我们的项目 xff0c 今天小编主要简单的介绍一下如何实现首页的一级分类的显示 xff0c 比如小伙伴现在看的CSDN xff0c
  • Kettle---初识

    最近因公司项目的原因 xff0c 小编接触到了Kettle这样一款工具 xff0c 感觉挺好玩儿的 xff0c 通过几天的探索和学习 xff0c 对 Kettlde 的使用有了一点点小心得 xff0c 小编打算把这段期间学习和探索到的关于
  • 读书笔记---《人月神话》

    台上一分钟 xff0c 台下十年功 宝剑锋从磨砺出 xff0c 梅花香自苦寒来 xff1b 不经一番寒彻骨 xff0c 哪得梅花扑鼻香 xff1b 业精于勤而荒于嬉 xff0c 行成于思而毁于随 不积跬步 xff0c 无以至千里 xff1b
  • Intel CPU型号官网详解

    https www intel cn content www cn zh processors processor numbers html
  • Nrf52832 freeOS系统移植

    最近因为项目开发需要 xff0c 需要多任务的操作系统在nrf52832上运行 xff0c 于是根据例程移植了下FreeOS系统 根据例程F nRF5 SDK 15 2 0 9412b96 examples ble peripheral b

随机推荐

  • tf 使用

    1 发布自己的tf xff1a 其实就是发布你建立的坐标系 步骤如下 xff1a 1 定义一个广播 xff0c 相当于发布话题时定义一个发布器 xff0c 还是以官方的小乌龟例程为例 xff1a span class hljs keywor
  • 解决问题:xshell6评估已过期

    一 问题描述 今天打开xshell xff0c 发现报错 xff1a 34 xshell6评估过期 34 无法打开xshell xff0c 当时急着要用xshell xff0c 所以 xff0c 是有这个问题的 二 解决方法 1 进入xsh
  • 华为机试题: 水仙花数

    描述 水仙花数又称阿姆斯特朗数 水仙花数是指一个n 位数 n 3 xff0c 它的每个位上的数字的n 次幂之和等于它本身 xff08 例如 xff1a 1 3 43 5 3 43 3 3 61 153 xff09 求输入的数字是否为水仙花数
  • 【手把手教你树莓派3 (二)】 启动wifi模块

    概述 树莓派3内置了wifi和蓝牙模块 xff0c 我们不用像以前的版本那样 xff0c 再去购买一个外接的模块练到raspberry上 当我们第一次启动了树莓派的时候 xff0c 必然使用了网线 xff0c 但是之后的每一次使用 xff0
  • 社区活动 | Apache Kylin × Apache RocketMQ Meetup 深圳站

    9 月 7 日 xff0c Apache Kylin Meetup 即将走进深圳 xff01 本次 Meetup 由 Apache Kylin 与 Apache RocketMQ 联合举办 xff0c 邀请到来自腾讯 阿里 平安云以及 Ky
  • 【手把手教你树莓派3 (六)】使用 motion 和 mjpg 做视频监控器

    概述 买了一个罗技的usb接口的摄像头 xff0c 想通过raspberry pi做一个视频的实时监控器 xff0c 看了一下这各功能可以通过两款软件实现 xff1a motion和mjpg streamer xff0c 先来简单介绍下这两
  • 【zookeeper】data/zookeeper_server.pid: No such file or directory FAILED TO WRITE PID 报错

    今天在配置zk的伪集群 xff0c 发现了如下报错 xff1a 上网查看有的说是因为zoo cfg配置文件 61 前后有空格 xff0c 查了以后我的配置文件并没有空格 xff0c 所以我排除了这个原因 最后解决 xff1a zk的配置文件
  • golang tag 之 gomodifytags

    链接 xff1a gomodifytags原文链接 gomodifytags 是go工具 xff0c 用来修改 更新struct字段的标签tag 使用gomodifytags可以很方便的update add delete struct的字段
  • Vscode Clangformat 配置

    1 xff0c vscode 安装 c 43 43 intellisense 即可自动安装clangformat 格式化工具 2 xff0c vs setting Clang format path 配置 一般位置就是 vscode ext
  • 计算机基本原理之内存编址

    内存编址目的 存储器由一块块的空间 xff08 存储单元 xff09 组成 xff0c 为了方便寻找到每一块空间 xff0c 我们需要对每一个空间进行标识 内存编址 内存编址概述 芯片 存储器由若干个芯片构成 内存容量 存储器的大小 内存容
  • PowerDesigner—你知道CDM、LDM、PDM、OOM的区别吗?

    导读 在本篇文章中 xff0c 你将会了解到PowerDesigner工具中的三种模型CDM xff0c OOM xff0c PDM的区别和联系 PowerDesigner 简称PD xff0c 是一种数据建模工具 xff0c 适合于开发大
  • 基础 HTML之目录问题(相对路径和绝对路径区别)

    导读 复习HTML知识的时候 xff0c URL的路径的写法是我们经常会用到的一块内容 相对路径和绝对路径的问题不难 xff0c 只要明白各自的道理 xff0c 同时清楚 这些字符的含义就可以了 原文链接 xff1a http www jb
  • 【Android开发—智能家居系列】(一):智能家居原理

    来到JCZB公司的第二天 xff0c 就接到了开发类似于小米智能家庭APP的任务 组长让我在手机上安装上此款APP xff0c 给了我个小米智能插座 xff0c 就让我开始了解需求 这便开启了我的智能家居旅程 说实话 xff0c 我也真是o
  • 【Android开发—智能家居系列】(二):用手机对WIFI模块进行配置

    在实际开发中 xff0c 我开发的这款APP是用来连接温控器 xff0c 并对温控器进行控制的 有图为证 xff0c 哈哈 上一篇文章 Android开发 智能家居系列 xff08 一 xff09 xff1a 智能家居原理 的文末总结中写到
  • 【POI】——获得单元格的值,并转化成字符串

    本篇文章分享一些在做导入导出EXCEL功能时用到的工具类的一些代码 span class hljs javadoc span class hljs javadoctag 64 param span cell span class hljs
  • ElementUI实现文件手动上传

    ElementUI实现文件手动上传 HTML部分 lt el upload ref 61 34 upload 34 multiple 61 34 true 34 file list 61 34 fileList 34 auto upload
  • 【工具篇】——利用EditPlus进行Json数据格式化

    从接口返回的数据基本都是json格式的数据 之前我要查看数据的内容 xff0c 为了方便我阅读 xff0c 我会直接复制这段数据到在线JSON校验格式化工具中进行格式化和校验 但是没网的时候 xff0c 就不能靠它了 而EditPlus是我
  • 【GIS】——mapnik在windows上的安装

    mapnik是瓦片生成器 这里先不解释了 xff0c 等用过了再谈理解 下载步骤 1 下载安装包 官网地址 xff1a http mapnik org http mapnik org pages downloads html 3 0 12还
  • 【GIS】——使用Python bindings操作mapnik

    背景介绍 使用mapnik有三种方式 xff1a 1 使用XML配置文件 2 使用Python bindings 3 使用C 43 43 中的API 这里我们先介绍第二种Python bindings xff0c 并采用这种方式做一个Dem
  • 【MongoDB】(一)——关于MondoDB索引的总结

    导读 为数据创建索引有助于提高查询数据的性能 xff0c 本篇文章总结了创建MongoDB索引应遵循的规则 我将这些规则分成四类 xff1a 1 query 2 sort 3 RAM 4 selectivity query db span