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

Průsečík indexu MongoDB

Ve skutečnosti to tak je, i když v tomto případě ne. Abyste skutečně viděli, co se děje, musíte se podívat na "podrobnou" formu vysvětlení přidáním true :

db.t.find({item:"abc123",qty:{$gt:15}}).explain(true)
{
    "cursor" : "BtreeCursor item_1",
    "isMultiKey" : false,
    "n" : 84,
    "nscannedObjects" : 100,
    "nscanned" : 100,
    "nscannedObjectsAllPlans" : 201,
    "nscannedAllPlans" : 304,
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 2,
    "nChunkSkips" : 0,
    "millis" : 2,
    "indexBounds" : {
            "item" : [
                    [
                            "abc123",
                            "abc123"
                    ]
            ]
    },
    "allPlans" : [
            {
                    "cursor" : "BtreeCursor item_1",
                    "isMultiKey" : false,
                    "n" : 84,
                    "nscannedObjects" : 100,
                    "nscanned" : 100,
                    "scanAndOrder" : false,
                    "indexOnly" : false,
                    "nChunkSkips" : 0,
                    "indexBounds" : {
                            "item" : [
                                    [
                                            "abc123",
                                            "abc123"
                                    ]
                            ]
                    }
            },
            {
                    "cursor" : "BtreeCursor qty_1",
                    "isMultiKey" : false,
                    "n" : 0,
                    "nscannedObjects" : 101,
                    "nscanned" : 102,
                    "scanAndOrder" : false,
                    "indexOnly" : false,
                    "nChunkSkips" : 0,
                    "indexBounds" : {
                            "qty" : [
                                    [
                                            15,
                                            Infinity
                                    ]
                            ]
                    }
            },
            {
                    "cursor" : "Complex Plan",
                    "n" : 0,
                    "nscannedObjects" : 0,
                    "nscanned" : 102,
                    "nChunkSkips" : 0
            }
    ],

Zkrátka, ale poslední část je to, co hledáte. Jak je vysvětleno v příručce, vzhled „Složitého plánu“ znamená, že se používá křižovatka.

            {
                    "cursor" : "Complex Plan",
                    "n" : 0,
                    "nscannedObjects" : 0,
                    "nscanned" : 102,
                    "nChunkSkips" : 0
            }

Jediným případem je, že zatímco je „prohlížen“, není v tomto případě optimalizátorem vybrán jako „nejoptimálnější“ dotaz. Optimalizátor tedy říká, že ve skutečnosti plán využívající pouze jeden vybraný index je ten, který bude dokončen nejcitlivěji.

Takže i když byl zvažován „průnik“, nebyl „nejvhodnější“ a byl zvolen jediný index.




  1. Jak najít dokumenty odpovídající více kritériím

  2. MongoDB:Jedinečný klíč ve vloženém dokumentu

  3. Příprava serveru MongoDB pro produkci

  4. Mapovat/redukovat MongoDB ve více kolekcích?