Sử dụng $explain trong MongoDB

Toán tử $explain cung cấp thông tin về truy vấn, các chỉ mục được sử dụng trong truy vấn và một số thống kê khác. Toán tử này khá có ích khi cần phân tích xem các chỉ mục của bạn đã được tối ưu hóa như thế nào.

Trong chương trước, chúng ta đã tạo một chỉ mục cho users collection trên các trường genderuser_name với truy vấn sau:

>db.users.ensureIndex({gender:1,user_name:1})

Bây giờ, bạn sử dụng $explain trên truy vấn sau:

>db.users.find({gender:"M"},{user_name:1,_id:0}).explain()

Truy vấn trên sẽ cho kết quả đã qua phân tích như sau:

{
    "cursor": "BtreeCursor gender_1_user_name_1",
    "isMultiKey": false,
    "n": 1,
    "nscannedObjects": 0,
    "nscanned": 1,
    "nscannedObjectsAllPlans": 0,
    "nscannedAllPlans": 1,
    "scanAndOrder": false,
    "indexOnly": true,
    "nYields": 0,
    "nChunkSkips": 0,
    "millis": 0,
    "indexBounds": {
        "gender": [
            [
                "M",
                "M"
            ]
        ],
        "user_name": [
            [
                {
                    "$minElement": 1
                },

                {
                    "$maxElement": 1
                }
            ]
        ]
    }
}

Nhìn vào các trường trong tập kết quả này:

  • Giá trị true của indexOnly chỉ rằng truy vấn này đã sử dụng việc lập chỉ mục.

  • Trường cursor xác định kiểu con trỏ được sử dụng. Kiểu BTreeCursor chỉ rằng một chỉ mục được sử dụng và cũng cung cấp tên của chỉ mục đã được sử dụng đó. BasicCursor chỉ rằng một full scan đã được thực hiện mà không sử dụng bất kỳ chỉ mục nào.

  • Số n chỉ ra số Document đã được so khớp trong kết quả trả về.

  • nscannedObjects chỉ tổng số Document đã được quét.

  • nscanned chỉ tổng số Document hoặc chỉ mục đã được quét.

Last updated