如何验证mongo索引是否正常工作?

时间:2015-11-24 22:53:48

标签: mongodb indexing

我在mongo 2.6 DB中收集了一小部分mp3。来自这首"歌曲的文件"集合可能如下所示:

{_id: ..., name: "shagCarpet.mp3", tags: ["acapella", "rap"]}

我希望这个系列在不久的将来能够快速增长,因此我希望将此系列编入索引,以便于搜索。我在"标签"上创建了一个多键索引。像这样的领域:

db.songs.createIndex({"tags": 1})

由于收集目前很小,我不会通过添加索引来获得性能提升。如何验证索引是否正常工作?我可以查看索引中的数据吗?我知道db.songs.getIndexes(),但这只会让我在创建索引时对Mongo说了些什么。我想真正看到索引数据的样子。

3 个答案:

答案 0 :(得分:1)

确定索引是否正常工作的第一步是确定 您将如何搜索数据库。一旦找到最常运行和/或最昂贵的查询,请在shell中运行它们并附加.explain()调用。例如:

db.songs.find(...).explain();

这将转储大量信息,其中一部分将告诉您是否使用了索引,以及是否使用了哪些以及以何种顺序。有关这一切的含义的详细信息,请参阅here

答案 1 :(得分:1)

您可以使用explain()获得更多信息:

db.songs.find({"tags":"accapella"}).explain();

但我认为你想要将使用索引的查询速度与正常收集扫描的速度(无索引)进行比较。您可以使用hint()方法强制查询进行集合扫描,即。在_id。

db.songs.find({"tags":"accapella"}).hint({_id:1}).explain();

然后比较两者之间的explain()“millis”属性 - 你应该看到没有提示({_ id:1})的查询更快。

答案 2 :(得分:0)

使用

db.songs.find({"tags":"accapella"}).explain("executionStats");

如果 nReturned 等于 docsExamined,这意味着没有检查不必要的文档,并且您的索引完全覆盖了您的查询。

这里还有一篇好文章 https://www.percona.com/blog/2018/09/06/mongodb-investigate-queries-with-explain-index-usage-part-2/