我在mongo 2.6 DB中收集了一小部分mp3。来自这首"歌曲的文件"集合可能如下所示:
{_id: ..., name: "shagCarpet.mp3", tags: ["acapella", "rap"]}
我希望这个系列在不久的将来能够快速增长,因此我希望将此系列编入索引,以便于搜索。我在"标签"上创建了一个多键索引。像这样的领域:
db.songs.createIndex({"tags": 1})
由于收集目前很小,我不会通过添加索引来获得性能提升。如何验证索引是否正常工作?我可以查看索引中的数据吗?我知道db.songs.getIndexes()
,但这只会让我在创建索引时对Mongo说了些什么。我想真正看到索引数据的样子。
答案 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/