当前位置:网站首页>MongoDB中的索引操作总结
MongoDB中的索引操作总结
2022-07-04 20:57:00 【cui_yonghua】
一. 概述
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构
索引(Index)是帮助MySQL高效获取数据的数据结构。
可以得到索引的本质:索引是数据结构。
可以简单理解为“排好序的快速查找数据结构”。
索引存储一个特定字段或一组字段的值,按该字段的值排序。索引条目的排序支持有效的相等匹配和基于范围的查询操作。
另外,MongoDB可以通过使用索引中的顺序来返回排序的结果。
索引原理:MongoDB索引的数据结构默认为B-Tree。B-Tree类型的索引结构的特点:
- 每个叶子节点的深度都相同,通常为3层或者4层;
- 查询操作时,性能非常客观;
- 对于范围查询来说,直接遍历叶子节点的链表就能快速定位到匹配文档记录的指针位置。
官方文档-索引:https://www.mongodb.com/docs/manual/indexes/
二. 索引的常见操作
2.1 创建索引
MongoDB使用 createIndex() 方法来创建索引。( 3.0.0 版本后增加)
语法格式:db.collection.createIndex(keys, options)
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
可选参数如下:
backgroundBoolean类型, 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。
uniqueBoolean类型, 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
nameBoolean类型, 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDupsBoolean类型, 在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
sparseBoolean类型, 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSecondsinteger类型, 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
v索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weights索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_languageBoolean类型, 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_overrideBoolean类型, 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.
案例1:创建索引
db.col.createIndex({
"title":1})
案例2:createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。
db.col.createIndex({
"title":1,"description":-1})
案例3:在后台创建索引
db.values.createIndex({
open: 1, close: 1}, {
background: true})
注:MongoDB也可以使用 ensureIndex()方法来创建索引, 3.0.0版本后也能用,但只是 createIndex() 的别名。
2.2 常用指令
1、查看集合索引:db.col.getIndexes()
2、查看集合索引大小:db.col.totalIndexSize()
3、删除集合所有索引:db.col.dropIndexes()
4、删除集合指定索引:db.col.dropIndex("索引名称")
5、利用 TTL 集合对存储的数据进行失效时间设置:经过指定的时间段后或在指定的时间点过期,MongoDB 独立线程去清除数据。类似于设置定时自动删除任务,可以清除历史记录或日志等前提条件,设置 Index 的关键字段为日期类型 new Date()。
案例:例如数据记录中 createDate 为日期类型时:①设置时间180秒后自动清除;②设置在创建记录后,180 秒左右删除。
db.col.createIndex({"createDate": 1},{expireAfterSeconds: 180})
三、索引限制
3.1、最大范围
集合中索引不能超过64个
索引名的长度不能超过125个字符
一个复合索引最多可以有31个字段
3.2、查询限制
索引不能被以下的查询使用:
- 正则表达式及非操作符,如 $nin, $not, 等。
- 算术运算符,如 $mod, 等。
- $where 子句
所以,检测语句是否使用索引是一个好的习惯,可以用explain来查看。
3.3、额外开销
使用索引是有代价的,对于添加的每一个索引,每次写操作(插入、更新、删除)都将耗费更多的时间。这是因为,当数据发生变动时,MongoDB不仅要更新文档,还要更新集合上所有的索引。所以,如果你很少对集合进行读取操作,建议不使用索引。
边栏推荐
- Delphi soap WebService server-side multiple soapdatamodules implement the same interface method, interface inheritance
- [leetcode] 17. Letter combination of telephone number
- torch. Tensor and torch The difference between tensor
- 淘宝商品评价api接口(item_review-获得淘宝商品评论API接口),天猫商品评论API接口
- Can be displayed in CAD but not displayed in print
- Huawei ENSP simulator configures DHCP for router
- 应用实践 | 蜀海供应链基于 Apache Doris 的数据中台建设
- SolidWorks工程图添加材料明细表的操作
- [ 每周译Go ] 《How to Code in Go》系列文章上线了!!
- [public class preview]: basis and practice of video quality evaluation
猜你喜欢
![[early knowledge of activities] list of recent activities of livevideostack](/img/14/d2cdae45a18a5bba7ee1ffab903af2.jpg)
[early knowledge of activities] list of recent activities of livevideostack

巅峰不止,继续奋斗!城链科技数字峰会于重庆隆重举行

How is the entered query SQL statement executed?

开源之夏专访|Apache IoTDB社区 新晋Committer谢其骏

应用实践 | 蜀海供应链基于 Apache Doris 的数据中台建设

IIC (STM32)

【公开课预告】:视频质量评价基础与实践

Day24: file system

Three or two things about the actual combat of OMS system

How to implement Devops with automatic tools
随机推荐
Use of redis publish subscription
Maya lamp modeling
Lambdaquerywrapper usage
Jerry's ad series MIDI function description [chapter]
Use of class methods and class variables
案例分享|金融业数据运营运维一体化建设
OMS系统实战的三两事
How was MP3 born?
Jerry's ad series MIDI function description [chapter]
[early knowledge of activities] list of recent activities of livevideostack
输入的查询SQL语句,是如何执行的?
历史最全混合专家(MOE)模型相关精选论文、系统、应用整理分享
Can be displayed in CAD but not displayed in print
Maidong Internet won the bid of Beijing life insurance
旋变串判断
EhLib 数据库记录的下拉选择
Huawei ENSP simulator enables devices of multiple routers to access each other
How much is the minimum stock account opening commission? Is it safe to open an account online
MP3是如何诞生的?
Redis 排查大 key 的3种方法,优化必备