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.

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

索引构建性能

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

相关推荐
百***920239 分钟前
【MySQL】MySQL库的操作
android·数据库·mysql
q***766639 分钟前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
信仰_2739932431 小时前
Redis红锁
数据库·redis·缓存
人间打气筒(Ada)1 小时前
Centos7 搭建hadoop2.7.2、hbase伪分布式集群
数据库·分布式·hbase
心灵宝贝1 小时前
如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程)
数据库·mysql·macos
奋斗的牛马2 小时前
OFDM理解
网络·数据库·单片机·嵌入式硬件·fpga开发·信息与通信
忧郁的橙子.3 小时前
一、Rabbit MQ 初级
服务器·网络·数据库
杰杰7983 小时前
SQL 实战:用户访问 → 下单 → 支付全流程转化率分析
数据库·sql
爬山算法3 小时前
Redis(120)Redis的常见错误如何处理?
数据库·redis·缓存
野生技术架构师3 小时前
盘一盘Redis的底层数据结构
数据结构·数据库·redis