MongoDB - Как работает индексный префикс? - PullRequest
0 голосов
/ 23 июня 2019

Я прочитал эту документацию: " Сортировка и не префиксное подмножество индекса "

С этой информацией.Я пытаюсь ответить на этот вопрос о тесте MongoDB, у них есть вопрос

У вас есть следующие индексы в коллекции вещей:

    [
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.things"
    },
    {
        "v" : 1,
        "key" : {
            "a" : 1
        },
        "name" : "a_1",
        "ns" : "test.things"
    },
    {
        "v" : 1,
        "key" : {
            "c" : 1,
            "b" : 1,
            "a" : 1
        },
        "name" : "c_1_b_1_a_1",
        "ns" : "test.things"
    }
]

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


db.things.find( { b : 1 } ).sort( { c : 1, a : 1 } )

db.things.find( { c : 1 } ).sort( { a : 1, b : 1 } )

db.things.find( { a : 1 } ).sort( { b : 1, c : 1 } )

Ответ, который они дают ...

db.things.find( { b: 1} ).sort( {c: 1, a: 1} )

Может кто-нибудь помочь мне понять, почему другие 2 варианта неверны, то есть как они используют индекс/ Index-приставка.Насколько я понимаю, часть SORT должна соответствовать порядку indexed-column-order.Кроме того, предложенный правильный ответ также не соответствует правилу (согласно документации).

1 Ответ

1 голос
/ 23 июня 2019

Полагаю, учитывая варианты и ответ, упор делается на поиск:

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

Так что сортировка - это красная сельдь.

  • find({ b: 1 }) не может использовать ни один из предоставленных индексов
  • find({ c: 1 }) может использовать индекс c_1_b_1_a_1, так как он соответствует префиксу
  • find({ a: 1 }) можно использовать индекс a_1

Поскольку параметры # 2 и # 3 могут использовать индекс, они не будут загружать каждый документ для их сортировки, только те, которые найдены через индекс. Вариант № 1 должен будет выполнить полное сканирование коллекции, чтобы найти документы, где b равно 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...