mongo索引浅析

本文深入探讨了MongoDB的索引,包括B树数据结构、索引的使用和管理、各种类型的索引(如唯一、部分、稀疏、TTL、复合等)以及它们的特性和应用场景。强调理解查询需求、创建合适索引以提升查询效率的重要性,并提醒注意索引对内存的影响和使用覆盖索引的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是索引

索引是一种用来方便查询数据的 数据结构

B Tree就是一种常用的数据库索引数据结构,MongoDB采用 B 树做索引,索引创建在colletions 上。

我们可以在这个网站上直观的看到索引的效果

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

除了 B 树,平衡二叉树、红黑数、B + 树都可以用来做索引

mongodb 使用索引和不使用索引

  • MongoDB不使用索引的查询的时候,会先扫描所有的文档,再匹配符合条件的文档。

  • 使用索引的查询,会通过索引找到文档,使用索引能够极大的提升查询效率

mongodb 中的索引

mongodb 中的索引与多种索引类型,梳理一下看看效果

索引类型 描述 demo
单字段索引 在某一个特定的字段上建立索引
mongoDB 在 ID 上建立了唯一的单键索引,所以经常会使用 id 来进行查询;
在索引字段上进行精确匹配、排序以及范围查找都会使用此索引;
创建一个倒序的索引
db.users. createIndex({age:-1});
复合索引 在多个特定的属性上建立索引
复合索引键的排序顺序,可以确定该索引是否可以支持排序操作;
在索引字段上进行精确匹配、排序以及范围查找都会使用此索引,但与索引的顺序
有关;
为了性能考虑,应删除存在与第一个键相同的单键索引
db.users. createIndex({username:1,age:-1,country:1})
多键索引 在数组的属性上建立索引
针对这个数组的任意值的查询都会定位到这个文档,既多个索引入口或者键值引用
同一个文档
db.users.createIndex({favorites.city:1})
空间索引 2 种平面几何的 2d 索引,球面几何的2dsphere索引 见后文详解
文本索引 支持在集合中搜索字符串内容
db.reviews.createIndex( { comments: “text” } )
Hash索引 不同于传统的B-树索引,哈希索引使用hash函数来创建索引
在索引字段上进行精确匹配,但不支持范围查询,不支持多键hash;
Hash索引上的入口是均匀分布的,在分片集合中非常有用
db.users.createIndex({username : ‘hashed’})

如何使用索引

MongoDB 使用 createIndex() 方法来创建索引,createIndex() 方法基本语法格式是这样的

db.集合名.createIndex(keys, options)
  • key

文档类型值为要创建的索引字段,1为指定按升序创建索引,-按降序来创建索引指定为-1。

  • options

文档类型值 MongoDB 中提供了丰富的属性,比如 background,是否后台构建索引,

数据量太大时构建索引消耗时间长,为了不影响业务,可以加上此参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值