我启用了分析模式2(所有事件)。我的想法是编写一个脚本,它将遍历所有查询并执行解释计划,并查看是否有任何查询不使用索引。然而,由于我在system.profile中没有看到任何排序信息,所以不可能这样做。为什么这样?
由于
更新:
想象一下,你有一个用户集合。并且您已在此集合上创建了一个索引:user(name,createdAt)。现在我想找出一些按时间排序的用户。在system.profile中,查询的第二部分(排序/分页)将不会被保存,但是理解使用的排序操作非常重要,因为它会影响性能和索引选择。 所以我的目的是创建一个脚本,它将遍历system.profile中的所有语句并执行解释计划并查看是否使用了索引。如果没有,我可以在执行集成测试时自动捕获所有新的/不可靠的查询。
答案 0 :(得分:0)
为什么10gen选择不在system.profile中包含排序信息?
我建议如果您对该功能感兴趣,请提出here。 (我找不到此功能的现有建议)。您可能会获得有关未包含原因的详细信息。
我有时可以看到它有什么价值,尽管建议您{ns}对抗nredurned,以了解是否正在使用索引(更重要的是,确保扫描的文档很少)尽可能)。
因此,虽然不完美,但它为您提供了一种快速评估性能和检测索引使用情况的方法。
答案 1 :(得分:0)
您可以使用聚合框架进行排序
例如最慢的操作首先
db.system.profile.aggregate( { $sort : { millis : -1 }})
答案 2 :(得分:0)
对不起伙计们。我找到了这个问题的答案。实际上mongo有它。它在查询元素中称为orderby。我的坏: - )