MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Giao điểm chỉ số MongoDB

Nó thực sự làm được mặc dù nó không xảy ra trong trường hợp này. Để thực sự biết điều gì đang xảy ra, bạn cần xem dạng giải thích "dài dòng", bằng cách thê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
            }
    ],

Cắt ngắn, nhưng phần cuối cùng là những gì bạn đang tìm kiếm. Như đã giải thích trong sách hướng dẫn, sự xuất hiện của "Kế hoạch phức hợp" có nghĩa là một nút giao thông đang được sử dụng.

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

Trường hợp duy nhất ở đây là trong khi nó đang được "xem xét", nó không được trình tối ưu hóa chọn trong trường hợp này là truy vấn "tối ưu" nhất. Vì vậy, trình tối ưu hóa đang nói rằng trên thực tế, kế hoạch chỉ sử dụng một chỉ mục đã chọn, là kế hoạch sẽ hoàn thành theo cách đáp ứng tốt nhất.

Vì vậy, trong khi "giao điểm" được xem xét, nó không phải là "phù hợp nhất" và chỉ mục duy nhất đã được chọn.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB insertOne ()

  2. truy vấn một bộ sưu tập mà không chuyển lược đồ trong mongoose

  3. $ tra cứu nhiều cấp độ mà không có $ unwind?

  4. Mongodb thiết lập trường duy nhất

  5. Xuất Bộ sưu tập MongoDB sang Tệp CSV