WedX - журнал о программировании и компьютерных науках

Запрос Count работает слишком медленно в Couchbase

Я использую диванную базу: сообщество-6.0.0 в своем приложении Spring. У меня около 250 000 записей в базе данных. Мой запрос к базе данных работает очень быстро без использования команды запроса COUNT.

SELECT app.*, META(app).id AS id FROM app WHERE ( deleted = FALSE OR 
deleted IS MISSING ) AND _class = 
“com.myexample.app.device.data.model.DeviceEntity” AND appId = 
“something” AND dp.language = “somelanguage” LIMIT 100 OFFSET 0

Этот запрос работает очень хорошо и быстро… Время отклика менее 50 мс.

Однако

SELECT COUNT(*) AS count FROM app WHERE ( deleted = FALSE OR deleted 
IS MISSING ) AND _class = 
“com.myexample.app.device.data.model.DeviceEntity” AND appId = 
“something”

Это занимает 1 минуту. не могу уменьшить.

Индексы

начальный

СОЗДАТЬ ИНДЕКС class_appId_idx ВКЛ app(_class,appId)

СОЗДАТЬ ИНДЕКС ix1 ВКЛ app(_class,appId,если отсутствует(deleted, ложь))

Каково решение этого? Я думаю, индекс не работает со счетчиком? Любые советы, пожалуйста, как я могу этого добиться?

Примечание. Пробовал с EE edition, не работает.

20.12.2018

Ответы:


1

Система не может сопоставить индекс с запросом. Иногда оптимизатор не так уж умен. Попробуй это:

create index ix_test on test(_class, appId) WHERE deleted = FALSE OR deleted IS MISSING

Это будет использовать индекс.

Вообще говоря, из-за того, как мы строим индексы, у нас возникают проблемы с предложениями IS MISSING. Но добавление этого бита в предложение WHERE индекса заставляет его работать. Но это очень специализированный индекс. Рассмотрите возможность изменения ваших данных, чтобы поле «удалено» всегда присутствовало.

20.12.2018
  • На самом деле это не сработало, я сбросил свой старый индекс и воспользовался вашей командой. Вообще ничего не изменилось. Мой запрос был SELECT COUNT(*) AS count FROM app WHERE ((deleted = false) или (deleted отсутствует)) AND _class = com.myexample.appconnect.device.data.model.DeviceEntity AND appId = something; :/ Я фактически удалил весь индекс, включая первичный. 20.12.2018
  • Вы изменили предложение FROM с теста на приложение? Если нет, то я могу только сказать, что должна быть какая-то тонкая разница между моей версией кушетки и вашей. В этом случае я предлагаю вам рассмотреть возможность изменения вашей модели данных, чтобы всегда присутствовало значение «удалено». Это упростит запрос и упростит индексирование. 20.12.2018
  • Еще вы можете попробовать переписать свой запрос следующим образом SELECT COUNT(*) AS count FROM test WHERE IFMISSING(deleted, false) = false AND _class = "com.myexample.app.device.data.model.DeviceEntity" AND appId = "something" и использовать такой индекс: create index ix_test_im on test(_class, appId, IFMISSING(deleted, false)) 20.12.2018
  • Я изменил test на приложение mate. Спасибо за совет. Мне даже непонятно, почему время отклика длится около 1 минуты. Он говорит мне, что после шага IndexScan3 в FETCH теряется около 45-50 секунд. Тем не менее, спасибо за помощь. 20.12.2018
  • Я попробовал ваши последние запросы, это намного лучше. 26,63 с, а не 1 минута. Еще нужно уменьшить :/ 20.12.2018

  • 2

    Он работает за миллисекунды с использованием enterprise-6.0.0.

    25.12.2018
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: wedx@cp9.ru