Предложения по индексам Couchbase - PullRequest
1 голос
/ 28 января 2020

У меня есть корзина, содержащая такие документы: {"x": "x", "y": "y", "z": "z", // ...}

И У меня есть индекс GSI на 2 свойства (x, y).

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

1- SELECT * from bucket where x = "x" and y = "y"

2- 
    * SELECT meta().id from bucket where x = "x" and y = "y"
    * SELECT * from bucket USE KEYS [The keys returned by previous query]

Ответы [ 2 ]

3 голосов
/ 28 января 2020

Как подсказал @deniswsrosa, вариант 1 работает лучше. Так как в индексе есть вся информация о предикате запроса, и IndexScan способен выдавать точное количество документов (без ложных срабатываний). Оформить заказ https://blog.couchbase.com/create-right-index-get-right-performance/

Зависит от того, сколько документов соответствует критериям запроса, могут быть лучшие варианты. Поскольку для запроса требуется «выборка данных», данные должны быть go через 2 прыжка (узел данных в службу запросов, служба запросов в клиент). Если результирующие документы или меньше и имеют небольшой размер, опция 1 работает нормально.

Если число результирующих документов велико, а размер также велик, вы можете изучить следующую опцию.

  1. Используя закрывающий запрос, создайте ключи документа

    SELECT meta (). Id из корзины, где x = "x" и y = "y"

  2. Затем используйте Couchbase SDKs Asynchronous API и напрямую получить документы из узла данных.

2 голосов
/ 28 января 2020

Первый должен быть значительно быстрее, в основном потому, что вы выполняете один запрос вместо 2. Однако, поскольку вы используете «select *» в обоих запросах, вы будете запускать «выборку данных», что в большинстве случаев нормально, но если вам нужна максимальная производительность, вы должны попробовать использовать индексы покрытия вместо https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/covering-indexes.html

...