首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mongodb查询不使用索引

Mongodb查询不使用索引
EN

Stack Overflow用户
提问于 2018-09-05 02:22:50
回答 1查看 2.4K关注 0票数 3

我在一个mongo集合上设置了一个复合索引,无论我如何明确地针对前缀,我都无法让查询使用它。

索引是如何创建的:

代码语言:javascript
运行
复制
db.collection.createIndex({"insert_time":-1,"name":"text"},{background: true})

索引规范输出:

代码语言:javascript
运行
复制
db.collection.getIndexes()
[
{
    "v" : 2,
    "key" : {
        "_id" : 1
    },
    "name" : "_id_",
    "ns" : "db.collection"
},
{
    "v" : 2,
    "key" : {
        "insert_time" : -1,
        "_fts" : "text",
        "_ftsx" : 1
    },
    "name" : "insert_time_-1_name_text",
    "ns" : "db.collection",
    "background" : true,
    "weights" : {
        "name" : 1
    },
    "default_language" : "english",
    "language_override" : "language",
    "textIndexVersion" : 3
}
]

但是,当我在insert_time上运行最简单的查询时,explain()向我展示了获胜的计划是执行COLLSCAN,而不使用任何索引:

代码语言:javascript
运行
复制
db.collection.find({"insert_time": ISODate("2018-08- 
05T19:00:00Z")}).explain()
{
"queryPlanner" : {
    "plannerVersion" : 1,
    "namespace" : "db.collection",
    "indexFilterSet" : false,
    "parsedQuery" : {
        "insert_time" : {
            "$eq" : ISODate("2018-08-05T19:00:00Z")
        }
    },
    "winningPlan" : {
        "stage" : "COLLSCAN",
        "filter" : {
            "insert_time" : {
                "$eq" : ISODate("2018-08-05T19:00:00Z")
            }
        },
        "direction" : "forward"
    },
    "rejectedPlans" : [ ]
},
"serverInfo" : {
    "host" : "foo",
    "port" : 0000,
    "version" : "3.4.10",
    "gitVersion" : "078f28920cb24de0dd479b5ea6c66c644f6326e9"
},
"ok" : 1
}

尽管索引被指定为“复合索引”,但我的理解是我应该能够通过“前缀”进行搜索,在本例中,前缀是insert_time。你知道为什么mongo不使用我的索引吗?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52172041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档