Couchdb 2 _find查询不使用索引

时间:2017-09-19 19:06:41

标签: couchdb couchdb-mango

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

{ "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'芒果的实施还是我错过了什么?

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

1 个答案:

答案 0 :(得分:0)

只有类型索引,我认为它通常几乎同样有效,除非你有很多类型的文件(因为它必须在内存中进行排序阶段。)

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

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

为每个已按名称排序的类型提供此索引的连续切片。但查询计划程序可能无法确定此索引是否适用。

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

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

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