sql >> Database >  >> NoSQL >> MongoDB

mongodb - $lookup-pijplijn met COLLSCAN in plaats van index

De collectiescan in je explain-output verwijst naar de map_levels collectie, zoals vermeld in de queryPlanner.namespace waarde. De $lookup stage voegt gegevens uit een andere verzameling samen in de huidige pijplijn. Aangezien u geen zoekfasen heeft opgegeven vóór de $lookup , de map_levels collectie wordt herhaald met behulp van een collectiescan. Als een hele collectie wordt geladen zonder filter- of sorteercriteria, heeft een collectiescan minder overhead dan het herhalen van een index en het ophalen van de documenten.

U kunt de huidige collectiescan vermijden door een $match . toe te voegen fase vóór uw $lookup (ervan uitgaande dat u niet de volledige map_levels wilt verwerken collectie).

Helaas geeft de uitvoer van query-uitleg niet (zoals bij MongoDB 4.0) indexgebruik aan voor $lookup stadia. Een tijdelijke oplossing hiervoor zou zijn om uit te leggen met behulp van de pipeline van uw zoekopdracht als een aggregatiequery op het hoogste niveau.

Er is een relevant probleem om naar te kijken/op te stemmen in de MongoDB Issue-tracker:SERVER-22622:$lookup verbeteren uitleggen om het zoekplan op de "van"-verzameling aan te geven .




  1. Prestaties afstemmen in MapReduce voor prestatieverbetering

  2. Bellen Redis zunionstore van Lua met variabele TOETSEN

  3. Mongoose werkt meerdere documenten bij, werkt niets bij

  4. ip-bereiken opslaan in Redis