sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb enkel prefixfråga med regex och sortering är långsam

scanAndOrder: true i förklara-utmatningen indikerar att frågan måste hämta dokumenten och sedan sortera dem i minnet innan utdata returneras. Detta är en dyr operation och kommer att ha en inverkan på prestandan för din fråga.

Förekomsten av scanAndOrder: true samt skillnaden i nscanned ett n i förklara-utgången indikerar att frågan inte använder ett optimalt index. I det här fallet verkar det behöva göras en samlingsskanning. Du kanske kan lindra detta problem genom att inkludera indexnycklarna i din sort kriterier. Från mina tester:

db.posts.find({hashtags: /^noticias/ }).limit(15).sort({hashtags:1, rank : -1}).explain()

Kräver ingen skanning och beställning och returnerar n och nscanned av antalet poster du letar efter. Detta skulle också innebära sortering på hashtags nyckel, som kan vara användbar eller inte, men bör öka prestandan för frågan.




  1. MongoDB loggar alla frågor

  2. Infoga eller uppdatera många dokument i MongoDB

  3. MongoDb:lägg till element i array om det inte finns

  4. Minska utförandetiden för jobb med sidekiq