sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB index skärningspunkt

Jo det gör det faktiskt även om det inte gör det i det här fallet. För att verkligen se vad som händer måste du titta på den "verbose" formen av förklara, genom att lägga till 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
            }
    ],

Förkortad, men den sista delen är vad du letar efter. Som förklaras i manualen betyder utseendet på "komplex plan" att en korsning används.

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

Det enda fallet här är att medan den "betraktas" väljs den inte av optimeraren i detta fall som den mest "optimala" frågan. Så optimeraren säger att planen som använder bara det valda indexet är den som kommer att slutföras på det mest lyhörda sättet.

Så även om "korsningen" övervägdes, var den inte den "bästa passformen" och det enda indexet valdes.




  1. redis anslutningsfel i docker-behållaren

  2. Cacha tweets med Node.js, Redis och Socket.io

  3. Frågar MongoDB att matcha i det första objektet i en array

  4. Installera Memcached på Ubuntu 16.04/18.04 med Nginx och PHP-7.3