【问题标题】:MongoDB query involving some fields which are indexed and some which aren'tMongoDB查询涉及一些被索引的字段和一些没有被索引的字段
【发布时间】:2018-02-07 19:29:06
【问题描述】:

我在 MongoDB 中使用索引。我有一个查询:

db.collection.find({field1:"val1",field2:"val2",field3:"val3"})

其中 'field1' 和 'field2' 是复合索引的一部分但 'field3' 不是任何索引的一部分。 我的问题是是否会对整个集合执行集合扫描以匹配“field3”的值,或者“field1”和“field2”上的索引是否会限制要扫描“field3”值的文档数量?

提前感谢您的宝贵时间。

【问题讨论】:

  • 您应该查看查询的explain()。这将准确地告诉您您在寻找什么

标签: mongodb mongodb-query


【解决方案1】:

是的,将使用索引

我通过创建一个包含文档的集合对此进行了测试:

{ "a" : 1, "b" : 1, "c" : 1 }
{ "a" : 2, "b" : 2, "c" : 2 }
{ "a" : 3, "b" : 3, "c" : 3 }

并添加索引:

db.indexTest.createIndex({"a":1,"b":1})

单独查询字段“c”会返回解释:

"winningPlan" : {
            "stage" : "COLLSCAN",
            "filter" : {
                "c" : {
                    "$eq" : 3
                }
            },
            "direction" : "forward"
        },

查询“a”、“b”和“c”会返回使用索引的解释:

"winningPlan" : {
            "stage" : "FETCH",
            "filter" : {
                "c" : {
                    "$eq" : 3
                }
            },
            "inputStage" : {
                "stage" : "IXSCAN",
                "keyPattern" : {
                    "a" : 1,
                    "b" : 1
                },
                "indexName" : "a_1_b_1",
                "isMultiKey" : false,
                "multiKeyPaths" : {
                    "a" : [ ],
                    "b" : [ ]
                },

【讨论】:

    猜你喜欢
    • 2021-11-06
    • 1970-01-01
    • 2020-10-11
    • 2014-04-04
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多