【问题标题】:Couchbase N1QL Query getting distinct on the basis of particular fieldsCouchbase N1QL 查询根据特定字段变得不同
【发布时间】:2020-06-18 09:30:43
【问题描述】:

我有一个看起来像这样的文档结构:

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

我正在尝试获取关于 groupedFieldKey 唯一的所有文档。我还想从这些文档中的 ANY 中获取 otherField。这个otherFieldKey 从一个文档到另一个文档有微小的变化,但我很乐意获得这些值中的ANY

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 的方法会很好。


编辑 1: 您可以在 Couchbase 论坛中关注此讨论帖:https://forums.couchbase.com/t/getting-distinct-on-the-basis-of-a-field-with-other-fields/26458

【问题讨论】:

    标签: nosql couchbase n1ql


    【解决方案1】:

    GROUP 必须实现所有文档。你可以试试覆盖索引

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

    【讨论】:

      猜你喜欢
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多