[SERVER-41590] Covered query делает FETCH Created: 08/Jun/19  Updated: 10/Jun/19  Resolved: 10/Jun/19

Status: Closed
Project: Core Server
Component/s: Index Maintenance
Affects Version/s: 4.0.9, 4.0.10
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: Bocharov Vladislav Assignee: Unassigned
Resolution: Duplicate Votes: 0
Labels: bug
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

ubuntu 16.04


Attachments: File signedTest.json    
Issue Links:
Duplicate
duplicates SERVER-41594 Covered query don't use index for ran... Closed
Operating System: ALL
Steps To Reproduce:
  1. Загрузить приложенный дамп с коллекцией signedTest, там 1000 записей.
  2. Создать индекс:
    db.signedTest.createIndex({'data.contracts.dateSigned': 1})
  3. Сделать запрос с $lt и убедится, что работает COUNT_SCAN:
    db.signedTest.explain('executionStats').count({"data.contracts.dateSigned":{$lt:"2011-06-05"}})
  4. Запустить запрос с $lt, $gt и увидеть, что используется индекс для фильтрации с одной стороны и FETCH для фильтрации с другой: db.signedTest.explain('executionStats').count({"data.contracts.dateSigned":{$gt:"2009-05-01",$lt:"2011-06-05"}})
Participants:

 Description   

В документах коллекции есть поле contracts, которое хранит массив объектов, в объекте есть строковое поле signedDate с значениями такого вида "2016-09-23T18:02:00+02:02". Это поле проиндексировано. Запросы с count и $lt (аналогично $gt) используют индекс, stage COUNT_SCAN. Но запрос с одновременнно $gt и $lt использует индекс только с одной стороны, а другую фильтрует на FETCH стадии, из-за чего очень страдает скорость запроса (неприемлимо долго).

Почему индекс не использует одновременно две границы?

Была версия, что проблема в строке, её значение перенес в новое поле того же массива, в формате ISODate, создал индекс - но работает все точно так же. Отдельно отмечу, что не во всех документах есть массив contracts, хотя в большой части.



 Comments   
Comment by Bocharov Vladislav [ 10/Jun/19 ]

I translate it to Eng https://jira.mongodb.org/browse/SERVER-41594
So this version can be deleted or marked as duplicate.

Generated at Thu Feb 08 04:58:09 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.