2014-02-10 1 views
1

Я знаю, что такое «полная проверка коллекции». Но я немного не уверен, относится ли термин «сканирование коллекции» к запросам, использующим курсор B-дерева. Выполняются ли запросы, которые используют курсор, отличный от базового курсора, для проверки коллекции?Что такое сканирование коллекции в mongodb?

ответ

2

Короткий ответ - это два термина, то же самое, или, скорее, существует только «полное сканирование коллекции».

Если ваш запрос с использованием B-дерево курсора он является по определению не сканируемого коллекция путы обхода индекса для того, чтобы найти запрошенные документы.

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

http://docs.mongodb.org/manual/reference/method/cursor.explain/

+1

«Если ваш запрос с использованием B-дерево курсора она по определению не сканируемое сбора» - это всегда верно? Например, курсор B-дерева можно использовать только для этапа «сортировки», и запрос все равно может завершить сканирование коллекции для этапа «найти». – aquaraga

2

Сканирование коллекции, ну, буквально сканирование всей коллекции. Это происходит, когда пользователь запрашивает документы, используя некоторые условия, на которые невозможно ответить с помощью индекса. Для примера позволяет сказать, у нас есть коллекция пользователей с полями, такие как имя, возраст, цвет волос, адрес, номер телефона и страны

user = {"name" : "ABC", 
     "age" : 25, 
     "hair color" : "brown", 
     "address" : "XYZ", 
     "phone number" : 1234567890, 
     "country" :"Canada" 
     } 

Далее, если есть индекс по имени и построения запросов к БД с помощью,

db.users.find({"name" : "ABC"}); 

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

Предположим, вы запросите БД для какого-либо другого поля. Допустим, адрес

db.users.find({"address" : "XYZ"}); 

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

Для получения дополнительной информации вы можете посмотреть here.

Для вашего вопроса запрос, который использует курсор B-дерева, позволяет избежать выполнения сканирования коллекции и, следовательно, запросы с использованием любого типа курсора, отличного от основного курсора, «в основном», избегая сканирования коллекции.

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