Couchbase N1QL查询在特定字段的基础上得到不同的结果。

问题描述 投票:2回答:1

我有一个文档结构,它看起来像这样。

{
...
     "groupedFieldKey": "groupedFieldVal",
     "otherFieldKey": "otherFieldVal",
     "filterFieldKey": "filterFieldVal"
...
}

我想获取所有的文档,这些文档在groupedFieldKey上是唯一的。我还想从下面的文档中获取otherField。任何 这些文件的。这 otherFieldKey 从一个文件到另一个文件都有细微的变化,但我可以放心地得到 任何 的这些值。

SELECT DISTINCT groupedFieldKey, otherField
FROM bucket
WHERE filterFieldKey = "filterFieldVal";

这个查询可以获取所有的文档,因为有小的变化。

SELECT groupedFieldKey, maxOtherFieldKey 
FROM bucket
WHERE filterFieldKey = "filterFieldVal"
GROUP BY groupFieldKey
LETTING maxOtherFieldKey= MAX(otherFieldKey);

这个查询和预期的一样,但是由于有GROUP BY步骤,所以花费了很长的时间。因为这个查询是用来在UI中显示产品的,所以这不是一个理想的行为。我已经尝试应用索引,但没有快速得到结果。

记录的实际细节。

  • 记录数= 100,000
  • 每条记录的大小 = 约10 KB
  • 加载前10条记录所需时间。3s

有没有更好的方法?只在特定字段上获得DISTINCT的方法会很好。


EDIT 1您可以在Couchbase论坛上关注这个讨论主题。https:/forums.couchbase.comtgetting-distinct-on-the-based-of-a-field-with-other-fields26458。

nosql couchbase n1ql
1个回答
1
投票

GROUP必须将所有的文件实体化。你可以尝试覆盖索引

CREATE INDEX ix1 ON bucket(filterFieldKey, groupFieldKey, otherFieldKey);

© www.soinside.com 2019 - 2024. All rights reserved.