10

随着我项目的代码不断发展,新的索引正在到位,我相信一些旧的索引不再需要。但是,在我放弃它们以查看是否有任何减慢之前,我希望是否有更多的编程或分析方法来确定是否正在使用索引。

我在 system.indexes 集合中看不到任何内容,但理想情况下,某处有一些关于索引访问的统计信息!是这样吗?

4

2 回答 2

12

最后运行您的db.collection.find(...)查询.explain()。这是查看查询如何运行的最有用的方法:http ://www.mongodb.org/display/DOCS/Explain

您还可以打开分析,分析日志条目为您提供每个分析查询的索引使用情况。不过,目前还没有任何汇总统计数据。特别是,它不会给你哪些索引没有被使用,只有正在使用的索引(对于每个查询)。(编辑:我一定一直在想象——你必须从探查器获取查询,然后对其运行解释。手动有点痛苦。)http://www.mongodb.org/display/DOCS/Database+Profiler

更新: 刚从 mongolab 看到这个;看起来像一个有趣的新项目: http: //blog.mongolab.com/2012/06/introducing-dex-the-index-bot/

更新: 我创建了一个脚本来通过分析器检查未使用的索引: https ://github.com/wfreeman/indexalizer

于 2012-09-10T16:42:34.030 回答
2

是的,同意其他答案,对正在执行的查询使用解释()应该给我们信息,但是对于最新版本,我们可以尝试类似:

db.collection.aggregate([ { $indexStats: { } } ])

请查看以下链接以获取更多信息:

如何检查是否正在使用索引

https://docs.mongodb.com/manual/reference/operator/aggregation/indexStats/#pipe._S_indexStats

于 2018-12-05T17:07:28.833 回答