【问题标题】:Spring MongoDB query performancesSpring MongoDB 查询性能
【发布时间】:2022-01-04 15:26:11
【问题描述】:

我想深入了解springframeworks mongodb是如何工作的

所以假设我的数据库中有一个索引,一个包含 2 个字段 a、b 的复合索引

现在这些是我写的查询,我想知道其中哪些会命中索引以及一些关于性能的想法,以及哪种是最好使用的类型

1. Query q = new Query()
    query.addCriteria(Criteria.where(a).is("val")); 
    query.addCriteria(Criteria.where(b).is("val2"));

2. query.addCriteria(Criteria.where(a).is("val").andOperator(Criteria.where(b).is("val2")))

3. query.addCriteria(Criteria.where(a).is("val").and(b).is("val2"))

2 和 3 有什么区别。 所有这些变化都会达到正确的指数吗 一些相同的最佳实践

【问题讨论】:

  • 开启 Spring Data MongoDB 的查询日志以检查有什么区别,并使用这些查询进行性能测量。
  • @Harshit 做到了,但它没有显示我们是否正在点击索引它打印数据库查询我如何找到该信息
  • 如果你打开查询日志,那么它会记录查询,然后直接在该查询上使用 explain("executionStats") 来确定它是否使用索引。
  • 确实这只是关于 MongoDB 查询性能,Spring Data 只是将 java 调用转换为 MongoDB 查询。

标签: java mongodb spring-data spring-data-mongodb


【解决方案1】:

Spring-Data (MongoDB) 不会影响如何执行查询的决定。

对于查询,MongoDB(服务器)查询优化器在给定可用索引的情况下选择并缓存最有效的查询计划

参考:Query Plans

例外:

在查询上调用 cursor.hint(index) 以覆盖 MongoDB 的默认索引选择和查询优化过程

回答您的问题:查询规划器会根据您的查询选择最佳策略。无论你如何定义它,MongoDB都会在执行前对其进行分析和塑造。

它们等价于 MongoDB:

{"a": "val", "b":"val2"} 
{"a": "val", "$and":[{"b":"val2"}]} 
{"$and":[{"a": "val"}, {"b":"val2"}]} 

为每个查询运行 db.collection.find({...}).explain() 以获取更多详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2014-05-21
    • 2021-12-15
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多