У меня есть структура документа, которая выглядит примерно так:
{
...
"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. Поскольку этот запрос используется для отображения продуктов в пользовательском интерфейсе, это нежелательное поведение. Я пробовал применять индексы, но это не дало быстрых результатов.
Фактическая информация о записях:
- Количество записей = 100000
- Размер на запись = Приблизительно 10 КБ
- Время, затраченное на загрузку первых 10 записей: 3с
Есть ли лучший способ сделать это? Подойдет способ получения DISTINCT только для определенных полей.
EDIT 1 : вы можете следить за этой веткой обсуждения на форуме Couchbase: https://forums.couchbase.com/t/getting-distinct-on-the-basis-of-a-field-with-other-fields/26458