sql >> Databasteknik >  >> NoSQL >> MongoDB

Optimala sammansatta index för $ existerar :sant (glesa index)

Det du inte verkar förstå här är att $exists kan inte "ta" ett index på något sätt, även om det är gles. Som dokumentationen själv säger:

Exemplet som ges på dessa sidor är en { "$exists": false } fråga. Men det omvända logiska villkoret gör ingen skillnad här.

För att få "full nytta" av ett "gles" index måste du överväga vilken "typ" av data det innehåller och fråga på lämpligt sätt.

För numeriska, något som:

db.collection.find({ "a": "foobar", "b": { "$gte": -9999, "$lte": 9999 } })

Som använder ett index, och det sparsamma. Eller för textbaserad:

db.collection.find({ "a": "foobar", "b": /.+/ })

Som också kommer att använda sparse index och bara titta på de där "b" definierades.

För "matriser" sedan "var försiktig". Eftersom värdet som tittas på förmodligen är ett av ovanstående om du inte gjorde detta:

db.collection.insert({ "a": 1, "b": [[]] })

Var då detta är okej:

db.ab.find({ "a": 1, "b": { "$type": 4 } })

Men kommer inte riktigt att använda det "glesa" indexet heller av samma anledningar $exists kommer inte att fungera här.

Så du måste förstå vad termerna betyder här och "fråga på lämpligt sätt" för att använda indexdefinitionerna som du skapar om du förväntar dig maximal prestanda.

Det här är tydliga exempel som du kan testa själv och se att resultaten är sanna. Jag önskar att kärndokumentationen var tydligare på dessa punkter, men jag är också medveten om att många har försökt bidra (och har producerat utmärkta förklaringar) men ingen av dessa har inkluderats hittills.

Antar att det är därför du frågar här.




  1. Behöver jag stänga en mongoose-anslutning manuellt?

  2. Rails anpassad miljö Resque.enqueue skapar inga jobb

  3. RDBTools har köpts upp av RedisLabs!

  4. Spring Data Redis Expire Key