Mongodb索引简介

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第84篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

在Mongodb当中,为集合添加索引能够提高查询效率 。如果没有索引,Mongodb必须扫描集合中的每一个文档数据来返回查询结果。如果集合当中包含查询合适的索引,Mongodb就可以使用该索引限制扫描文档的数量。尽管索引能够提高查询效率,但为集合添加索引会对Mongodb数据写入性能产生负面的影响。对于大量读写的集合,加入索引的代价是昂贵的,因为每一次数据插入和更新,都会带来索引的更新。

应用场景

当应用经常重复的针对集合中的某个字段或一些字段进行查询时,系统维护人员使用这些字段来创建索引,能够提高查询性能。例如下面的一些场景

|-------------------------------------------------------------------------------------------------------------------------------------|-------------------|
| 场景 | 索引类型 |
| 人力资源部门经常使用员工的id查看员工信息。这可以为用户的id添加索引来提高查询效率 | 单字段索引 |
| 销售人员经常需要查看每个区域的销售情况。而区域是使用嵌入文档形式保存在数据库里的数据,包括多个字段,如城市,区县和邮编等。系统维护人员则可以在区域这个文档类型的字段上添加索引来提高查询性能。但用户在查询时,必须使用相同字段的文档作为过滤条件才可以使用到该索引 。 | 在嵌入是文档字段上创建的单字段索引 |
| 一个杂货铺老板,经常使用清点库存信息,需要使用商品名称和数量来查询数据。系统维护人员可以在商品名称和数量上添加索引来提高查询效率 | 复合索引 |

用户可以使用Mongodb Atlas, Mongodb shell和连接数据库的各种驱动以及客户端来创建索引。后续的文章中我们会介绍索引的创建方法。

索引结构

索引是保存了集合中部分数据的特殊数据结构。Mongodb使用B-tree这种数据结构来保存数据。很容易使用正序或者倒序来查询索引或通过索引来排序。索引保存了指定的字段值,并按照用户的指定的顺序进行排序。这种排序好的索引数据结构,能够方便的支持等值查询和区间查询。同时能够方便的支持排序。

默认索引

在集合创建的时候,Mongodb为_id字段建立的唯一索引。保证用户不会插入两个相同_id的文档。Mongodb不支持用户修改或删除默认索引。

索引的命名

索引默认使用字段名称和用户指定字段的排序方式来命名。使用下划线来区分字段名称和排序方式。例如在字段item和quantity上建立索引,其中item字段使用正序,而quantity字段倒序。{item: 1, quantity: -1}. 建立索引时,1表示正序,而-1表示倒序。则建立索引的默认名称是 item_1_quantity_-1.

索引建立后就无法重新命名,需要删除索引重建。

索引构建性能

在索引构建过程当中,应用和客户端性能可能会被索引的构建造成影响。包括限制对正在构建索引集合的读写等。

相关推荐
HalvmånEver1 分钟前
MySQL表的查询(二)
linux·数据库·学习·mysql
snow@li4 分钟前
数据库-Redis:常用语法 / Redis 核心知识技能梳理
数据库·redis·缓存
wangqiaowq5 分钟前
OEE 是 Overall Equipment Effectiveness 的缩写,中文意为设备综合效率
数据库
2301_8166602110 分钟前
如何在 Telegram Bot 中正确发送 HTML 格式的用户列表消息
jvm·数据库·python
2401_8987176612 分钟前
CSS如何使得响应式的侧边抽屉附带遮罩渐暗效果
jvm·数据库·python
weixin_4585801214 分钟前
如何在网页中完整展示数组中所有对象的全部属性
jvm·数据库·python
木易 士心14 分钟前
云数据库 Clouder 认证:SQL 基础开发与应用题型分析
数据库·后端·sql·oracle
2403_8832610914 分钟前
PHP源码能否在Chromebook上运行_ChromeOS硬件限制说明【解答】
jvm·数据库·python
djjdjdjdjjdj16 分钟前
golang如何编写DNS查询工具_golang DNS查询工具编写大全
jvm·数据库·python
·云扬·21 分钟前
从0到1理解分库分表:我踩过的坑与实战经验
运维·数据库·mysql