Использует ли mongodb индекс с отсутствующим полем? - PullRequest
0 голосов
/ 26 сентября 2018

Допустим, у меня есть коллекция mongodb things с существующим индексом {foo: 1}

Благодаря индексу запрос db.things.find({foo: 'something'}) выполняется быстро и не сканирует документы.

Но как насчет запроса db.things.find({foo: 'something', bar: 'else'})?

Интуитивно я бы сказал, что существующий индекс должен помочь, поскольку требуется только найти элементы, соответствующие foo: 'something' (быстро), а затемотсканировать (надеюсь, несколько) документов.

Это то, что использует mongodb, или просто игнорирует индекс {foo: 1}, так как запрос использует разные поля?

Спасибо,

1 Ответ

0 голосов
/ 26 сентября 2018

Ты прав.MongoDB по-прежнему использует индекс даже при использовании другого поля в поиске.Вы можете проверить это с помощью db.things.explain().find({foo: 'something', bar: 'else'}).

. Вы получите что-то вроде:

"winningPlan" : {
    "stage" : "FETCH",
    "filter" : {
            "bar" : {
                    "$eq" : "else"
            }
    },
    "inputStage" : {
            "stage" : "IXSCAN",
            "keyPattern" : {
                    "foo" : 1
            },
            "indexName" : "foo_1",
            "isMultiKey" : false,
            "multiKeyPaths" : {
                    "foo" : [ ]
            },
            "isUnique" : false,
            "isSparse" : false,
            "isPartial" : false,
            "indexVersion" : 2,
            "direction" : "forward",
            "indexBounds" : {
                    "foo" : [
                            "[\"something\", \"something\"]"
                    ]
            }
    }

Этот список показывает, как mongoDB выполнял ваш поиск (он начинается снизу вверх).Первый этап с «IXSCAN» показывает, что mongoDB сначала использовал индекс, а затем попытался выполнить остальной поиск с помощью «FETCH»

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