SpringMongoDB查询演出

Spring MongoDB query performances

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

所以假设我的数据库中有一个索引,一个包含 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-数据(MongoDB)不影响查询执行方式的决定。

For a query, the MongoDB (server) query optimizer chooses and caches the most efficient query plan given the available indexes

参考: Query Plans

异常:

Call cursor.hint(index) on a query to override MongoDB's default index selection and query optimization process

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

它们等同于 MongoDB:

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

运行 db.collection.find({...}).explain() 每个查询的详细信息。