Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Couchbase 使用具有对象对的索引(在覆盖查询的情况下)会有性能开销吗_Couchbase_N1ql_Couchbase Indexing - Fatal编程技术网

Couchbase 使用具有对象对的索引(在覆盖查询的情况下)会有性能开销吗

Couchbase 使用具有对象对的索引(在覆盖查询的情况下)会有性能开销吗,couchbase,n1ql,couchbase-indexing,Couchbase,N1ql,Couchbase Indexing,假设我在对象对(values.val.data)上创建了一个索引 我的索引是否将“values”字段存储为数组(由于对象对的原因,ID的元素名和数据的元素val) 如果是这样,并且如果我的n1ql查询是一个覆盖查询(通过select子句仅获取Object_pair(values).val.data),那么还会有性能开销吗?(因为我的印象是,在上述情况下,由于索引已经包含作为数组的“值”字段,因此不会发生实际的对象对转换,从而避免了开销。只有在非覆盖查询的情况下,才会访问实际文档并对“值”字段进行

假设我在对象对(values.val.data)上创建了一个索引

我的索引是否将“values”字段存储为数组(由于对象对的原因,ID的元素名和数据的元素val)

如果是这样,并且如果我的n1ql查询是一个覆盖查询(通过select子句仅获取Object_pair(values).val.data),那么还会有性能开销吗?(因为我的印象是,在上述情况下,由于索引已经包含作为数组的“值”字段,因此不会发生实际的对象对转换,从而避免了开销。只有在非覆盖查询的情况下,才会访问实际文档并对“值”字段进行对象对转换)

Couchbase文档:

    "values": {
        "item_1": {
            "data": [{
                    "name": "data_1",
                    "value": "A"
                },
                {
                    "name": "data_2",
                    "value": "XYZ"
                }
            ]
        },
        "item_2": {
            "data": [{
                    "name": "data_1",
                    "value": "123"
                },
                {
                    "name": "data_2",
                    "value": "A23"
                }
            ]
        }
    }
}```

UPDATE:
suppose if we plan to create index on Object_pair(values)[*].val.data & Object_pair(values)[*].name

Index: CREATE INDEX idx01 ON ent_comms_tracking(ARRAY { value.name, value.val.data} FOR value IN object_pairs(values) END)

Query: SELECT ARRAY { value.name, value.val.data} FOR value IN object_pairs(values) END as values_array FROM bucket

您能粘贴完整的CREATEINDEX语句吗

在对象对(
)上创建索引。val.data不索引任何内容

您可以通过创建主索引,然后运行以下查询来检查它:

SELECT OBJECT_PAIRS(`values`).val FROM mybucket
输出为:

[
  {}
]
对象对(
)返回包含对象值的属性名称和值对的值数组-

SELECT OBJECT_PAIRS(`values`) FROM mybucket


[
  {
    "$1": [
      {
        "name": "item_1",
        "val": {
          "data": [
            {
              "name": "data_1",
              "value": "A"
            },
            {
              "name": "data_2",
              "value": "XYZ"
            }
          ]
        }
      },
      {
        "name": "item_2",
        "val": {
          "data": [
            {
              "name": "data_1",
              "value": "123"
            },
            {
              "name": "data_2",
              "value": "A23"
            }
          ]
        }
      }
    ]
  }
]

它是一个数组,所以它的值不是直接引用的

hey@varun-v,我已经在上面的原始帖子中更新了索引和查询信息。是的,我知道object_pairs转换逻辑,也许上面的更新会更清楚地说明我在object_pairs(values.val.data)上创建索引的意思。