sql >> Databáze >  >> NoSQL >> MongoDB

Optimální složené indexy pro $exists :true (řídké indexy)

Zdá se, že zde nerozumíte tomu, že $exists nemůže žádným způsobem "uchopit" index, ani tam, kde je řídký. Jak říká samotná dokumentace:

Příklad uvedený na těchto stránkách je { "$exists": false } dotaz. Ale obrácená logická podmínka zde nehraje žádný rozdíl.

Abyste získali „plný přínos“ „řídkého“ indexu, musíte zvážit „typ“ dat, která obsahuje, a vhodně se dotazovat.

Pro numerické něco jako:

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

Který používá index, a ten řídký. Nebo pro textové:

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

Což také použije řídký index a podívá se pouze na ty, kde bylo definováno "b".

U „polí“ pak „buďte opatrní“. Protože sledovaná hodnota je pravděpodobně jedna z výše uvedených, pokud jste neudělali toto:

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

Kde je to tedy v pořádku:

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

Ale opravdu nebude používat "řídký" index ze stejných důvodů $exists zde nebude fungovat.

Musíte tedy porozumět tomu, co zde tyto pojmy znamenají, a „vhodně se dotazovat“, abyste mohli použít definice indexu, které vytvoříte, pokud očekáváte maximální výkon.

Toto jsou jasné příklady, které si můžete sami vyzkoušet a uvidíte, že výsledky jsou pravdivé. Přál bych si, aby základní dokumentace byla v těchto bodech jasnější, ale také jsem si vědom toho, že se mnozí pokusili přispět (a vytvořili vynikající vysvětlení), ale žádná z nich nebyla dosud zahrnuta.

Hádám, že proto se ptáte zde.




  1. MongoDB seřadit podle pouze existuje záznam, klíč s hodnotou jako první a klíč s hodnotou null nebo neexistuje jako poslední

  2. Standardní kodek UUID Spring Boot nefunguje s AbstractMongoClientConfiguration

  3. Mongoose agregátní vyhledávání - Jak filtrovat podle konkrétního ID

  4. Jak se připojit k MongoDB z jiné třídy PHP?