随着我项目的代码不断发展,新的索引正在实施,我相信不再需要一些旧的索引。然而,在我放弃它们以查看是否有任何速度变慢之前,我更倾向于是否有更多的编程或分析方法来确定是否正在使用索引。
我在system.indexes集合中没有看到任何内容,但理想情况下,某些地方有索引访问的统计数据!是这种情况吗?
答案 0 :(得分:11)
运行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
答案 1 :(得分:1)
是的,与其他答案一致,对执行的查询使用explain()可以为我们提供信息,但是对于最新版本,我们可以尝试以下方法:
db.collection.aggregate([ { $indexStats: { } } ])
请查看以下链接以获取更多信息:
How do I check if an index is being used
https://docs.mongodb.com/manual/reference/operator/aggregation/indexStats/#pipe._S_indexStats