我们已经在我们的一个mongodb集合上积累了大量的索引,如果可能的话删除其中的一些将是一件好事。 然而,很难知道应用程序正在使用哪些索引,哪些(如果有的话)现在已经过时。
有谁知道任何工具/技术来分析哪些索引正在使用?
编辑:Mongo v3.0.5
您可以在个别查询上使用query.explain()来返回该查询的查询计划。 你可以在这里进一步了解。 https://docs.mongodb.com/manual/reference/method/cursor.explain/
其他的事情你可能想看看:
在serverStatus的输出中:
scanned scanAndOrder
在collStats的输出中:
totalIndexSize indexSizes
在dbStats的输出中:
dbStats.indexes dbStats.indexSize
不幸的是,MongoDB 3.0没有直接的方法来识别未使用的索引。
通过引入$ indexStats,MongoDB 3.2的确改进了这一点,它显示了索引访问: https ://docs.mongodb.com/manual/reference/operator/aggregation/indexStats/
几点build议:
尝试确定任何可能是前缀的索引,因为这些索引可能是多余的。 请记住,索引的sorting可能很重要
正如Jacob所说,使用解释计划可以帮助识别查询是否正在使用索引。 PlanCache.getPlansByQuery()将通过显示数据库当前为特定查询模式caching哪些查询计划进行扩展: https : //docs.mongodb.com/v3.0/reference/method/PlanCache.getPlansByQuery/#PlanCache。 getPlansByQuery