MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Przecięcie indeksu MongoDB

Cóż, rzeczywiście tak jest, chociaż w tym przypadku tak nie jest. Aby naprawdę zobaczyć, co się dzieje, musisz spojrzeć na „pełną” formę wyjaśnienia, dodając 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
            }
    ],

Krótko, ale ostatnia część jest tym, czego szukasz. Jak wyjaśniono w instrukcji, pojawienie się „Planu złożonego” oznacza, że ​​używane jest skrzyżowanie.

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

Jedynym przypadkiem jest to, że podczas „patrzenia” nie jest w tym przypadku wybierane przez optymalizator jako najbardziej „optymalne” zapytanie. Tak więc optymalizator twierdzi, że w rzeczywistości plan wykorzystujący tylko jeden wybrany indeks jest tym, który zostanie zrealizowany w najbardziej responsywny sposób.

Więc chociaż brano pod uwagę „przecięcie”, nie było ono „najlepiej dopasowane” i wybrano pojedynczy indeks.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Obiekt kolekcji nie jest wywoływalnym błędem w PyMongo

  2. WiredTiger i aktualizacje na miejscu

  3. MongoDB:Aktualizacja dokumentów przy użyciu danych z tego samego dokumentu

  4. Przechowuj datę w MongoDB bez uwzględniania strefy czasowej

  5. mongodb jak zmienić domyślny port