MongoDB - 使用索引


CSDN用户名:jcLee95


【概述】
索引本质上是一种特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分。索引支持在 MongoDB 中高效执行查询:

  • 在没有索引时,MongoDB 必须执行集合扫描,即扫描集合中的每个文档,以选择那些与查询语句匹配的文档
  • 在有了索引以后,如果查询存在合适的索引,MongoDB 可以使用该索引来限制它必须检查的文档数量。

MongoDB 在集合层次定义索引,并支持 MongoDB 集合中 文档的任何字段 或 子字段的索引。

#mermaid-svg-7fAYCz8FaIFepETf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7fAYCz8FaIFepETf .error-icon{fill:#552222;}#mermaid-svg-7fAYCz8FaIFepETf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7fAYCz8FaIFepETf .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-7fAYCz8FaIFepETf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7fAYCz8FaIFepETf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7fAYCz8FaIFepETf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7fAYCz8FaIFepETf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7fAYCz8FaIFepETf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7fAYCz8FaIFepETf .marker.cross{stroke:#333333;}#mermaid-svg-7fAYCz8FaIFepETf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7fAYCz8FaIFepETf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7fAYCz8FaIFepETf .cluster-label text{fill:#333;}#mermaid-svg-7fAYCz8FaIFepETf .cluster-label span{color:#333;}#mermaid-svg-7fAYCz8FaIFepETf .label text,#mermaid-svg-7fAYCz8FaIFepETf span{fill:#333;color:#333;}#mermaid-svg-7fAYCz8FaIFepETf .node rect,#mermaid-svg-7fAYCz8FaIFepETf .node circle,#mermaid-svg-7fAYCz8FaIFepETf .node ellipse,#mermaid-svg-7fAYCz8FaIFepETf .node polygon,#mermaid-svg-7fAYCz8FaIFepETf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7fAYCz8FaIFepETf .node .label{text-align:center;}#mermaid-svg-7fAYCz8FaIFepETf .node.clickable{cursor:pointer;}#mermaid-svg-7fAYCz8FaIFepETf .arrowheadPath{fill:#333333;}#mermaid-svg-7fAYCz8FaIFepETf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7fAYCz8FaIFepETf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7fAYCz8FaIFepETf .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-7fAYCz8FaIFepETf .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-7fAYCz8FaIFepETf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7fAYCz8FaIFepETf .cluster text{fill:#333;}#mermaid-svg-7fAYCz8FaIFepETf .cluster span{color:#333;}#mermaid-svg-7fAYCz8FaIFepETf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7fAYCz8FaIFepETf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

索引的分类
字段类型
字段数量
索引特点
索引节点与物理记录对应方式
单键索引
在文档的单个字段上创建用户定义的升序/降序索引
复合索引
复合索引可以支持匹配多个字段的查询
主键索引
非主键索引
唯一索引
索引的唯一属性会导致 MongoDB 拒绝索引字段的重复值
稀疏索引
索引的稀疏属性确保索引仅包含具有索引字段的文档的条目
文本索引
支持在集合中搜索字符串内容
地理空间索引
使用平面几何返回结果的`2d 索引`
使用球面几何返回结果的`2dsphere 索引`
聚簇索引
非聚簇索引
索引节点上直接包含了数据记录
仅仅包含一个指向数据记录的指针

1. 创建索引

db.collection.createIndex(keys, options)
  • 参数:

    参数 key options
    类型 文档(document) 文档(document)
    说明 包含字段和键值对的文档。字段是索引键,值是该字段索引类型的描述。当值为1时表示升序索引,值为-1时则表示降序索引。 可选。是包含一组控制索引创建的选项的文档。
  • 例:比如在age字段上创建单个键降序索引:
    db.collection.createIndex( { age: -1 } )
    

2. 索引的移除

(1)移除指定的索引

db.collection.dropIndex(index)
  • 参数:

    参数 类型 描述
    index 字符串(string) 或者 文档(document) 指定要被删除的索引。可以通过索引名称或者索引规范文档指定索引。若要删除文本索引,则应指定索引的名称。
  • 例如:
    删除comment集合中userid字段上的升序索引:

    db.comment.dropIndex({useroid:1})
    
    { "nIndexsWas" : 3, "ok" : 1 }
    

(2)移除所有的索引

3. 索引的查看

db.collection.getIndexws()

该方法将返回一个集合中的所有索引的数组。

4. 不同的索引类型

4.1 单字段索引

4.2 复合索引

4.3 数组索引(多值索引)

当我们对数组型的字段创建索引时,这个索引就是多值的,称之为多值索引或者数组索引

4.4 TTL索引

4.5 文本索引

4.6 条件索引

4.7 稀疏索引

4.8 模糊索引

5. 索引的唯一性约束

【待完善】MongoDB - 使用索引相关推荐

  1. Mongodb的索引操作

    Mongodb的索引操作 1. 为什么mongdb需要创建索引 加快查询速度 进行数据的去重 2. mongodb创建简单的索引方法 语法:db.集合名.ensureIndex({属性:1}),1表示 ...

  2. MongoDB复合索引详解

    摘要: 对于MongoDB的多键查询,创建复合索引可以有效提高性能. 什么是复合索引? 复合索引,即Compound Index,指的是将多个键组合到一起创建索引,这样可以加速匹配多个键的查询.不妨通 ...

  3. MongoDB数据库索引基础知识与实战技巧

    本文内容源自Kyle Banker 的MongoDB In Action一书.主要描述了MongoDB索引相关的一些基础知识和使用技巧. 索引类型 虽然MongoDB的索引在存储结构上都是一样的,但是 ...

  4. Mongodb的索引

    1. 简单介绍 索引是为了加速查询. 假设没有索引,mongodb在查询时会做表扫描,假设集合非常大时,这个查询会非常慢. 一般对创建查询时的键都建立索引. 为排序字段建立索引,假设对未建立索引的字段 ...

  5. 五、MongoDB的索引

    一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 四.MongoDB的查询 五.MongoDB的索引 1.简介 它就像是一本书的目录,如果没 ...

  6. mongodb及其索引的使用例子

    1.获取某个属性最大的value值并自增范例 因为mongo不支持类似select max操作,也不支持递增int的操作,所以采用目前的方案 #找到符合table_name的记录,find输出时只输出 ...

  7. mongo 唯一约束索引_快速掌握mongoDB(三)——mongoDB的索引详解

    1 mongoDB索引的管理 本节介绍mongoDB中的索引,熟悉mysql/sqlserver等关系型数据库的小伙伴应该都知道索引对优化数据查询的重要性.我们先简单了解一下索引:索引的本质就是一个排 ...

  8. MongoDB 教程索引 (附有视频)

    MongoDB 教程索引 MongoDB 教程一: 安装和使用 (Mongodb启动命令mongod参数说明) MongoDB 教程二: 添加, 删除,查询 shell命令 MongoDB 教程三: ...

  9. MongoDB 谨防索引seek的效率问题【华为云技术分享】

    目录 背景 初步分析 索引seeks的原因 优化思路 小结 声明:本文同步发表于 MongoDB 中文社区,传送门: http://www.mongoing.com/archives/27310 背景 ...

最新文章

  1. plotly可视化表格数据:以表格可视化pandas dataframe
  2. 使用Formik轻松开发更高质量的React表单(一)入门
  3. leetcode-合并两个有序链表
  4. 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
  5. HUAWEI HiAI 3.0 分布式,瑜伽、开车还能这么玩......
  6. Apache Mnemonic成为Apache顶级项目,主要解决大数据性能问题
  7. 最新用python来操作mysql完全解析
  8. java来电报名字的软件_读短信来电报姓名最新版
  9. python 频谱图_SciPy spectrogram:计算频谱图
  10. gerrit常见错误与处理
  11. nexus+4+android+6,Android 4.1.1+Nexus S安装BT5
  12. Vue过滤器filter和filters的使用详解
  13. 【Matplotlib】 移动spines
  14. 姿态估计之2D人体姿态估计(1)(仅供个人参考)
  15. BISTML-CRF项目源码
  16. 计算机网络安全评估,计算机网络系统安全性分析及评估
  17. 神奇的 Excel 插件:Azure DevOps 插件
  18. 阿里内部干货分享 曾鸣:淘宝是怎样从 0 做到 0.1 的?
  19. how to know a new word's meaning
  20. VIEWGOOD(远古)中小学数字化校园建设的应用方案

热门文章

  1. auto和decltype的用法总结
  2. 【动态规划】LeetCode 53. Maximum Subarray
  3. python matplotlib.pyplot 填充曲线下面积
  4. 《Outlier Analysis》书籍
  5. 解决ORA-00054资源正忙的问题
  6. js正则表达式——数字校验
  7. 谈谈MySQL的WriteSet并行复制
  8. Linux下不停止服务,清空nohup.out文件
  9. Node.js API方法
  10. LightOJ 1038-Race to 1 Again(概率dp)