架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 473|回复: 2

【实战】MongoDB 查看索引和创建索引

[复制链接]
发表于 2022-2-11 17:46:29 | 显示全部楼层
MongoDB 索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

回顾:


查询执行计划

示例语句:

在没有创建索引的情况下(winningPlan:COLLSCAN(全表扫)),如下图:

QQ截图20220211172305.jpg QQ截图20220211174520.jpg

explain() 函数也可以接收不同参数,通过设置不同参数可以查看更详细的查询计划。

参数包括:queryPlanner(缺省)、executionStats、allPlansExecution

执行explain("executionStats"),会发现执行计划中多了一些统计信息。

参数含义
totalKeysExamined索引扫描次数
totalDocsExamined文档扫描次数
nReturned返回的结果数
executionTimeMillis执行耗时
executionSuccess是否执行成功

创建索引

MongoDB使用 createIndex() 方法来创建索引。

注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex(),之后的版本使用了 db.collection.createIndex() 方法,ensureIndex() 还能用,但只是 createIndex() 的别名。

创建单个索引


创建复合索引

语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。

查询索引

命令如下:

QQ截图20220211174254.jpg

删除索引

删除所有索引

删除指定索引

(完)




上一篇:discuz 如何限制台湾用户注册,随意发布信息,写法求教。
下一篇:【实战】.NET/C# 使用 StackExchange.Redis 模糊查询导出缓存
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2022-2-11 17:49:16 | 显示全部楼层
慢查询分析流程:

1.用慢查询日志(system.profile)找到超过200ms的语句

2.然后再通过.explain()解析影响行数,分析为什么超过200ms

3.决定是不是需要添加索引

开启慢查询:


参数:

0:关闭,不收集任何数据。
1:收集慢查询数据,默认是100毫秒。
2:收集所有数据

查看结果:


注意:索引基本上可以说是常驻在内存中的,索引如果数据量达到亿级,索引的 数量越少越好,因为会占据大量的内存。网上的说法,100万条索引约占50M内存。如果一个亿,那么将占据5g内存。

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-2-13 16:30:52 | 显示全部楼层
学习了。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2022-8-12 08:32

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表