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

Jednoduchý dotaz MongoDB je velmi pomalý, i když je nastaven index

Nemáte žádný index, který by k tomu mongo automaticky použilo, takže provádí úplné skenování tabulky.

Jak je uvedeno v dokumentech

Proč

Pokud máte index na a,b - a hledáte podle a samostatně - automaticky se použije index. Je to proto, že je to začátek indexu (což je rychlé), db může zbytek hodnoty indexu prostě ignorovat.

Index na a,b je neefektivní při vyhledávání podle b samotný jednoduše proto, že nedává možnost použít indexové vyhledávání s "začíná tímto pevným řetězcem".

Takže buď:

  • Zahrňte do dotazu _reference_1_id (pravděpodobně irelevantní)
  • NEBO přidejte index na _reference_2_id (pokud se dotazujete pomocí pole často)
  • NEBO použijte nápovědu

Nápověda

Pravděpodobně vaše nejlevnější možnost právě teď.

Přidejte nápovědu k dotazu, kterou chcete vynutit pomocí _reference_1_id_1__reference_2_id_1_id_1 index. Což bude pravděpodobně mnohem rychlejší než úplné prohledávání tabulky, ale stále mnohem pomalejší než index, který začíná polem, které používáte v dotazu.

tj.

db.mycoll
    .find({"_reference_2_id" : ObjectId("jkl7890123456")})
    .hint("_reference_1_id_1__reference_2_id_1_id_1");


  1. Připojte se k AWS ElastiCache pomocí In-Transit Encryption + Auth z jiného klienta než redis-cli+stunnel

  2. Pohyblivé průměry s agregačním rámcem MongoDB?

  3. jak zkontrolovat verzi instance redis?

  4. Jak provedete spojení na poli v mongoose (mongodb) pomocí node.js?