Низкая производительность N1QL на небольшом наборе данных с использованием индекса покрытия - PullRequest
1 голос
/ 04 июля 2019

Я использую Couchbase 6 Community Edition, и в моем контейнере содержится около 2 миллионов документов небольших размеров (<5000 байт). Каждый документ имеет поля с именем country, и у меня есть GSI в этом поле.В этом поле есть четыре уникальных значения, однако запрос для получения этих уникальных значений занимает от 8 до 10 секунд.Я не уверен, почему это так медленно.Мой запрос: </p>

SELECT DISTINCT(country)
FROM test_bucket
USE INDEX(country_index USING GSI)
WHERE country IS NOT MISSING

Квота памяти в этом сегменте составляет 50 ГБ.и у машины 40 ядер.

Я хотел бы спросить, что здесь является узким местом или что может стать причиной узкого места в этой ситуации

1 Ответ

1 голос
/ 04 июля 2019

У вас правильный индекс. Поскольку у вас есть 2 миллиона документов для документов стран, необходимо получить все 2 миллиона записей из индексатора и устранить дубликаты. Используйте профилирование запроса, описанное на странице 341 https://blog.couchbase.com/n1ql-practical-guide-second-edition/

Также описана методика оформления заказа https://dzone.com/articles/count-amp-group-faster-using-n1ql

Если вы можете использовать версию EE, вы можете использовать агрегирование индекса, как описано здесь https://blog.couchbase.com/understanding-index-grouping-aggregation-couchbase-n1ql-query/, изменив запрос на группировку, как показано ниже.

SELECT country
FROM test_bucket
USE INDEX(country_index USING GSI)
WHERE country IS NOT MISSING
GROUP BY country;
...