首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mongodb索引hint()

使用mongodb索引hint()
EN

Stack Overflow用户
提问于 2021-09-06 12:55:22
回答 1查看 369关注 0票数 0

在我正在学习的mongodb课程中,我遇到了这个问题:我们必须找到要传递给下面查询的提示()的参数,才能获得所需的输出。

代码语言:javascript
复制
var exp = db.restaurants.explain("executionStats")
exp.find({ "address.state": "NY", stars: { $gt: 3, $lt: 4 } }).sort({ name: 1 }).hint(REDACTED)

O/P:

代码语言:javascript
复制
{
  "queryPlanner": {
    "plannerVersion": 1,
    "namespace": "m201.restaurants",
    "indexFilterSet": false,
    "parsedQuery": "REDACTED",
    "winningPlan": {
      "stage": "SORT",
      "sortPattern": {
        "name": 1
      },
      "inputStage": {
        "stage": "SORT_KEY_GENERATOR",
        "inputStage": {
          "stage": "FETCH",
          "inputStage": {
            "stage": "IXSCAN",
            "keyPattern": "REDACTED",
            "indexName": "REDACTED",
            "isMultiKey": false,
            "isUnique": false,
            "isSparse": false,
            "isPartial": false,
            "indexVersion": 1,
            "direction": "forward",
            "indexBounds": "REDACTED"
          }
        }
      }
    },
    "rejectedPlans": [ ]
  },
  "executionStats": {
    "executionSuccess": true,
    "nReturned": 3335,
    "executionTimeMillis": 20,
    "totalKeysExamined": 3335,
    "totalDocsExamined": 3335,
    "executionStages": "REDACTED"
  },
  "serverInfo": "REDACTED",
  "ok": 1
}

答:{ "address.state":1,“星星”:1,“名称”:1}

给出了上面的答案,我不理解的是,如果address.state、星星和名称作为索引,并且由于查询包含按复合索引顺序排列的整前缀,所以内存排序阶段不应该发生。但是在这里,尽管在传递给函数的索引参数末尾有一个名称索引,但排序还是会发生的。为什么指定名称索引时会显式地进行排序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-06 13:07:35

啊,找到答案了,如果查询谓词只包含相等条件,索引中的键可以用于过滤和排序。由于我们使用$gt和$lt,这里执行显式排序。

可能最佳性能的查询顺序:等式、排序、范围

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

https://stackoverflow.com/questions/69074918

复制
相关文章

相似问题

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