我来为您讲解MongoDB的index_stats()函数的作用与使用方法的完整攻略。
作用
index_stats()函数是MongoDB的一个用于索引统计的函数,它用于分析和返回关于集合中索引使用情况的统计信息,包括每个索引的使用频率、命中率、丢失率以及其它一些统计数据,可以对MongoDB中的索引进行校验、优化和调整,从而提高查询性能。
使用方法
语法:
db.collection.indexStats( { } )
参数:
{ }
:一个可选的查询条件,指定了只返回符合查询条件的索引信息。
返回值:
包含有关集合中索引使用情况的各种统计信息(包括每个索引的使用频率、命中率、丢失率等),以及查询条件的索引信息。
注意:
- indexStats()函数只能应用于集合级别,不能用于整个数据库级别。
- 此函数必须在 admin 的权限下执行,例如使用以下命令切换到 admin 数据库,然后执行查询:
js
use admin
db.runCommand( { collStats: "collection", indexDetails: true } )
下面将通过两个实例说明index_stats()函数的使用方法和重点参数。
示例一:统计集合中的所有索引信息
假设我们有一个名为students的集合,我们需要统计该集合中所有索引的使用情况。执行以下代码:
use test // 首先选择一个你要统计的库
db.students.indexStats()
返回结果如下:
{
"name": "_id_",
"key": {
"_id": 1
},
"host": "localhost:27017",
"accesses": {
"ops": 7,
"since": "2021-10-25T09:20:24.9393258Z"
},
"process": "MongoDB Shell",
"created": ISODate("2021-10-25T08:38:47Z"),
"expires": ISODate("2021-11-24T08:38:47Z"),
"cacheHits": 7,
"cacheMisses": 0,
"winningPlan": {
"stage": "FETCH",
"inputStage": {
"stage": "IXSCAN",
"keyPattern": {
"_id": 1
},
"indexName": "_id_",
"isMultiKey": false,
"multiKeyPaths": {
"_id": []
},
"isUnique": true,
"isSparse": false,
"isPartial": false,
"indexVersion": 2,
"direction": "forward",
"indexBounds": {
"_id": ["[MinKey, MaxKey]"]
}
}
},
"rejectedPlans": []
},
{
"name": "score_1",
"key": {
"score": 1
},
"host": "localhost:27017",
"accesses": {
"ops": 2,
"since": "2021-10-25T09:03:14.9128284Z"
},
"process": "MongoDB Shell",
"created": ISODate("2021-10-25T09:02:03Z"),
"expires": ISODate("2021-11-24T09:02:03Z"),
"cacheHits": 0,
"cacheMisses": 2,
"winningPlan": {
"stage": "FETCH",
"inputStage": {
"stage": "IXSCAN",
"keyPattern": {
"score": 1
},
"indexName": "score_1",
"isMultiKey": false,
"multiKeyPaths": {
"score": []
},
"isUnique": false,
"isSparse": false,
"isPartial": false,
"indexVersion": 2,
"direction": "forward",
"indexBounds": {
"score": ["[MinKey, MaxKey]"]
}
}
},
"rejectedPlans": []
}
其中,每一个对象代表一个索引,包含该索引的各种统计信息,如索引名称、键值、索引命中次数、创建时间、过期时间等。此时并未对查询条件进行统计。
示例二:统计指定索引的使用情况
假设我们需要统计students集合中score字段所对应的索引的使用情况,只返回符合条件的索引信息。执行以下代码:
use test // 首先选择一个你要统计的库
db.students.indexStats( { name: "score_1" } )
返回结果如下:
{
"name": "score_1",
"key": {
"score": 1
},
"host": "localhost:27017",
"accesses": {
"ops": 1,
"since": "2021-10-25T09:51:59.5789474Z"
},
"process": "MongoDB Shell",
"created": ISODate("2021-10-25T09:02:03Z"),
"expires": ISODate("2021-11-24T09:02:03Z"),
"cacheHits": 0,
"cacheMisses": 1,
"winningPlan": {
"stage": "FETCH",
"inputStage": {
"stage": "FETCH",
"inputStage": {
"stage": "IXSCAN",
"keyPattern": {
"score": 1
},
"indexName": "score_1",
"isMultiKey": false,
"multiKeyPaths": {
"score": []
},
"isUnique": false,
"isSparse": false,
"isPartial": false,
"indexVersion": 2,
"direction": "forward",
"indexBounds": {
"score": ["[MinKey, MaxKey]"]
}
}
}
},
"rejectedPlans": []
}
很明显,只返回了满足条件的一条索引记录。#%%