【问题标题】:Couchdb 2 _find query not using indexCouchdb 2 _find 查询不使用索引
【发布时间】:2017-09-25 20:25:38
【问题描述】:

我正在努力解决应该很容易但对我来说毫无意义的事情,我在数据库中有这两个文档:

{ "name": "foo", "type": "typeA" },
{ "name": "bar", "type": "typeB" }

我将这个发布到 _find:

{
    "selector": {
        "type": "typeA"
    },
    "sort": ["name"]
}

按预期工作,但我收到没有匹配索引的警告,所以我尝试将以下各种组合发布到 _index,这没有区别:

{
    "index": {
        "fields": ["type"]
    }
}
{
    "index": {
        "fields": ["name"]
    }
}
{
    "index": {
        "fields": ["name", "type"]
    }
}

如果我删除按名称排序并仅索引它工作正常但未排序的类型,这是 couchdbs 的 mango 实现的限制还是我遗漏了什么?

使用视图和地图功能可以正常工作,但我很好奇芒果在这里做什么/不做什么。

【问题讨论】:

    标签: couchdb couchdb-mango


    【解决方案1】:

    仅使用类型索引,我认为它通常几乎同样有效,除非您有许多每种类型的文档(因为它必须在内存中进行排序阶段。)

    但是由于字段是有序的,所以有必要这样做:

    {
        "index": {
            "fields": ["type", "name"]
        }
    }
    

    为已按名称排序的每种类型拥有此索引的连续切片。但是查询计划器可能无法确定该索引是否适用。

    例如,当前的pouchdb-find(应该类似)需要更复杂但等效的查询:

      {
        selector: {type: 'typeA', name: {$gte: null} },
        sort: ['type','name']
      }
    

    选择此索引并构建一个不依赖于在内存中构建任何步骤的计划。

    【讨论】:

    • 使用该索引时,我收到错误“此排序不存在索引,请尝试按排序字段进行索引。”,除了仅在名字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2013-05-19
    • 1970-01-01
    • 2012-05-21
    • 2013-07-10
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多