#couchbase #n1ql #couchbase-java-api
#couchbase #n1ql #couchbase-java-api
Вопрос:
Мне нужно общее количество записей, доступных для условия, для отображения как — «Страница 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);
Ответ №1:
Предложение запроса ORDER BY следует порядку ключей индекса. Таким образом, запрос использует порядок индексов и позволяет избежать сортировки и быстро предоставлять результаты. Когда это произойдет, количество сортировки в метриках будет отсутствовать (что будет равно нулю 0). Поскольку он использует порядок индекса, он завершает сканирование индекса, как только удовлетворяет запросу. Таким образом, общее количество квалифицированных записей неизвестно. Вам необходимо выполнить явный запрос count, чтобы узнать итоговые результаты.
Даже если запрос выполняет явную сортировку с ОГРАНИЧЕНИЕМ СМЕЩЕНИЕ (<= 8192), он будет использовать сортировку TOP n. В этом случае также количество сортировки может не отражать правильный vlaue.
Следующий индекс может работать лучше. Запрос распознает предикат равенства 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/
Комментарии:
1. Большое спасибо, приятель, ответ был полезен. У меня есть еще один вопрос, я столкнулся с проблемой производительности после использования условия OR в запросе. Каким должен быть индекс для приведенного ниже запроса?
SELECT Count(1) FROM CMS WHERE LastUpdatedOn > 0 AND (EditedBy = 'me' OR IsLatestVersion = true)
2. index-advisor.couchbase.com/indexadvisor/#1
3. Спасибо, эта ссылка была очень полезной. Я попробовал приведенный ниже небольшой запрос, чтобы проверить, получаю ли я количество сортировок (просто для изучения), но количество сортировок по-прежнему равно нулю даже для этого небольшого запроса, я что-то упускаю? Я был бы рад, если бы смог увидеть количество сортировки для любого небольшого запроса.
SELECT Title FROM
CMS` ГДЕ LastUpdatedOn > 0 и IsLatestVersion = true`