帮助中心/最新通知

质量为本、客户为根、勇于拼搏、务实创新

< 返回文章列表

【服务器相关】基于MongoDB数据库索引构建情况全面分析

发表时间:2025-06-16 03:46:00 小编:主机乐-Yutio

前面的话

本文将详细介绍MongoDB数据库索引构建情况分析

概述

创建索引可以加快索引相关的查询,但是会增加磁盘空间的消耗,降低写入性能。这时,就需要评判当前索引的构建情况是否合理。有4种方法可以使用

1、mongostat工具

2、profile集合介绍

3、日志

4、explain分析

mongostat

mongostat是mongodb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果发现数据库突然变慢或者有其他问题的话,首先就要考虑采用mongostat来查看mongo的状态

mongostat是查看mongodb运行状态的程序,使用方式如下

mongostat -h ip:port

【字段说明】

profile

mongodb可以通过profile来监控数据,进行优化

【级别】

首先,要查看当前是否开启profile功能

使用下面的命令会返回level等级,值为0|1|2,0代表关闭,即不记录任何操作;1代表记录慢命令(默认值为100ms),即记录运行时间超过100ms的操作;2代表全部,即记录任何操作

日志

在配置日志文件时,可以使用verbose参数来配置日志详细程度,参数值从’v’到’vvvvv’,’v’越多,详细度越高

日志会记录mongodb的运行状态,包括连接时间、当前正在进行的操作等

explain

MongoDB 提供了一个 explain 命令让我们获知系统如何处理查询请求。利用 explain 命令,可以很好地观察系统如何使用索引来加快检索,同时可以针对性优化索引

explain有三种模式,分别是:queryPlanner、executionStats、allPlansExecution。现实开发中,常用的是executionStats模式

首先,插入10万条数据

1、执行时间

executionTimeMillis值越小越好

2、条目数量

最理想的状态是: nReturned=totalKeysExamined=totalDocsExamined

3、stage类型

stage的类型列举如下:


COLLSCAN:全表扫描IXSCAN:索引扫描FETCH:根据索引去检索指定documentSHARD_MERGE:将各个分片返回数据进行mergeSORT:表明在内存中进行了排序LIMIT:使用limit限制返回数SKIP:使用skip进行跳过IDHACK:针对_id进行查询SHARDING_FILTER:通过mongos对分片数据进行查询COUNT:利用db.coll.explain().count()之类进行count运算COUNTSCAN:count不使用Index进行count时的stage返回COUNT_SCAN:count使用了Index进行count时的stage返回SUBPLA:未使用到索引的$or查询的stage返回TEXT:使用全文索引进行查询时候的stage返回PROJECTION:限定返回字段时候stage的返回

不希望看到包含如下的stage:


COLLSCAN(全表扫描)SORT(使用sort但是无index)不合理的SKIPSUBPLA(未用到index的$or)COUNTSCAN(不使用index进行count)

以上这篇基于MongoDB数据库索引构建情况全面分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


联系我们
返回顶部