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

Jak MongoDB vybírá kandidátské plány

Pokud lze dotaz uspokojit více indexy definovanými v kolekci, MongoDB otestuje všechny použitelné indexy paralelně. První index, který může vrátit 101 výsledků, vybere plánovač dotazů. Existují další aspekty výběru indexu, ale obecně to platí podle Optimalizace dotazu dokumentaci.

Tato metoda výběru indexu může vybrat suboptimální index. Je to proto, že z pohledu MongoDB máte více indexů, které popisují stejnou věc. Chcete-li zmírnit suboptimální výběr indexu, který jste pozorovali, můžete:

  1. Odstraňte všechny ostatní indexy, o kterých zjistíte, že nejsou optimální.

    Tím je zajištěno, že plánovač dotazů nebude mít jinou možnost, než vybrat indexy, které jste přizpůsobili svému dotazu.

  2. Použijte hint() metoda

    hint() umožňuje výslovně říci MongoDB, aby pro dotaz použil předepsaný index. Například:

    db.tasks.find(...).hint({project: 1, created_by: 1})
    

    Viz https://docs.mongodb.com/v2. 6/reference/operator/meta/hint/ pro více informací o hint() .

Další nuance ve vašem dotazu je, že obsahuje $or operátor. V tomto případě každý výraz v $or výraz musí mít přidružený index , jinak MongoDB provede skenování kolekce (BasicCursor v podmínkách MongoDB 2.6). Toto je podrobněji vysvětleno na https://docs .mongodb.com/v2.6/reference/operator/query/or/#behaviors




  1. Jak nastavit Redis ve vlastním jmenném prostoru jako mezipaměť a MQ ve webové aplikaci ServiceStack pomocí Structuremap

  2. MongoDB filtr více dílčích dokumentů

  3. Funkce vysílání socket.io a architektura Redis pub/sub

  4. Hledání dat a ignorování času v mongoDB