Сортировка показателей Couchbase всегда равна нулю - N1QL + .NET SDK

Мне нужно общее нет. записей, доступных для отображения условия, например - Страница 1 из «Всего записей» (я отображаю данные в сетке). Согласно форумам Couchbase, показатели подсчета сортировки должны давать мне общее количество записей, но это дает мне ноль. Любая помощь высоко ценится. с помощью .NET SDK.

Используемый запрос N1QL:

        select  Title
        from `CMS`
        where LastUpdatedOn > 0 and IsLatestVersion = true   
        order by LastUpdatedOn DESC LIMIT 2

Используемый индекс:

    CREATE INDEX `CMS_idx_LastUpdatedOnDesc_IsLatestVersion` ON `CMS`(LastUpdatedOn DESC, IsLatestVersion);

person Kannan M    schedule 24.08.2020    source источник


Ответы (1)


Предложение ORDER BY в запросе следует порядку ключа индекса. Таким образом, запрос использует порядок индекса и избегает сортировки и быстро предоставляет результаты. Когда это произойдет, sortCount в метриках будет отсутствовать (это будет ноль 0). Поскольку он использует порядок индекса, он прекращает сканирование индекса, как только он удовлетворяет запросу. Таким образом, общее количество квалифицированных записей неизвестно. Чтобы узнать общие результаты, необходимо выполнить явный запрос на подсчет.

Даже если запрос выполняет явную сортировку с LIMIT + OFFSET (‹= 8192), он будет использовать сортировку TOP n. В этом случае sortCount также может не отражать правильное значение.

Следующий индекс может работать лучше. Запрос распознает предикат равенства IsLatestVersion и по-прежнему использует порядок индекса. Это позволяет избежать большего количества страниц сканирования индекса (аналогично btree)

CREATE INDEX `CMS_idx_LastUpdatedOnDesc_IsLatestVersion` ON 
  `CMS`(IsLatestVersion, LastUpdatedOn DESC, Title); 

SELECT  Title
FROM `CMS`
WHERE LastUpdatedOn > 0 and IsLatestVersion = true   
ORDER BY LastUpdatedOn DESC 
LIMIT 2

https://blog.couchbase.com/offset-keyset-pagination-n1ql-query-couchbase/

person vsr    schedule 25.08.2020
comment
Большое спасибо, дружище, ответ оказался полезным. У меня есть еще один вопрос. Я столкнулся с проблемой производительности после использования условия ИЛИ в запросе. Каким должен быть индекс для запроса ниже? SELECT Count(1) FROM CMS WHERE LastUpdatedOn > 0 AND (EditedBy = 'me' OR IsLatestVersion = true) - person Kannan M; 26.08.2020
comment
comment
Спасибо, эта ссылка была очень полезной. Я попробовал выполнить приведенный ниже небольшой запрос, чтобы проверить, получаю ли я счетчик сортировки (просто для обучения), но счетчик сортировки по-прежнему равен нулю даже для этого небольшого запроса. Я что-то упускаю? Я был бы счастлив, если бы смог увидеть счетчик сортировки для любого небольшого запроса. SELECT Title FROM CMS` WHERE LastUpdatedOn ›0 и IsLatestVersion = true` - person Kannan M; 26.08.2020