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