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

mongodb порядок предложений AND

При выполнении запроса AND в mongodb влияет ли производительность на порядок предложений? Мои тесты, кажется, показывают «нет», но мне интересно, не упускаю ли я что-то, потому что я видел статьи, утверждающие обратное.

Например. рассмотрим некоторые документы «Блога»:

{_id:1, type:'personal',   author:'Mr A',  ...}
{_id:2, type:'commercial', author:'Mr A',  ...}
{_id:3, type:'personal',   author:'Mr B',  ...}
{_id:4, type:'commercial', author:'Mr B',  ...}
{_id:5, type:'personal',   author:'Mr C',  ...}
{_id:6, type:'commercial', author:'Mr C',  ...}
{_id:7, type:'personal'  , author:'Mr D',  ...}
{_id:8, type:'commercial', author:'Mr D',  ...}

With indexes:
   col.ensureIndex({type:1})
   col.ensureIndex({author:1})

Теперь я могу запускать запросы AND с другим порядком:

col.find({type:'commercial', author:'Mr A'})
col.find({author:'Mr A' , type:'commercial' })

Я попытался запустить «объяснить», и у меня сложилось впечатление, что он будет использовать индекс «автор» независимо от порядка (поскольку «мистер А» имеет только два блога, а «коммерческий» появляется в 4 блогах). Так является ли задокументированной функцией выбор «наиболее сужающего» индекса независимо от порядка предложений? Спасибо большое.

22.06.2014

Ответы:


1

Рассмотрите возможность использования составного индекса, если вы запрашиваете более одного поля.

db.col.ensureIndex( { "type": 1, "author": 1 } )

Найдите документы: https://docs.mongodb.org/manual/core/index-compound/

Порядок полей в составном индексе очень важен. В предыдущем примере индекс будет содержать ссылки на документы, отсортированные сначала по значениям поля элемента, а внутри каждого значения поля элемента , отсортированные по значениям поля запаса. Дополнительные сведения см. в разделе Порядок сортировки.

22.06.2014
  • Конечно, вы правы, я, естественно, упомянул случаи намеренно отдельных индексов (обслуживающих и другие запросы). Извините, что не разъяснил, и все равно спасибо :) 22.06.2014

  • 2

    Так является ли задокументированной функцией выбор «наиболее сужающего» индекса независимо от порядка предложений?

    Да, MongoDB всегда будет пытаться использовать тот индекс, который даст вам наилучшие результаты. Когда вы делаете запрос, MongoDB использует оптимизатор запросов:

    Оптимизатор запросов MongoDB обрабатывает запросы и выбирает наиболее эффективный план запроса для запроса с учетом доступных индексов. Затем система запросов использует этот план запроса при каждом выполнении запроса.

    Когда вы запускаете запрос без плана запроса, MongoDB создаст новый. . Чтобы создать план запроса, MongoDB будет выполнять несколько запросов параллельно для нескольких индексов-кандидатов. Выбранный индекс будет затем использоваться во всех последующих запросах с тем же шаблоном запроса.

    Подробнее о планах запросов можно прочитать в документации MongoDB.

    Кроме того, просто для справки: если вы знаете, какой индекс вы хотите использовать в своем запросе, вы можете указать его с помощью подсказка метод курсора.

    col.find({type:'commercial', author:'Mr A'}).hint({ author : 1});
    

    При выполнении запроса AND в mongodb влияет ли производительность на порядок предложений?

    С двумя отдельными индексами в обоих полях порядок не имеет значения, потому что MongoDB всегда будет выбирать лучший индекс.

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

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

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

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

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

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

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

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


    Для любых предложений по сайту: [email protected]