Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Hiểu Query Plan (Kế hoạch truy vấn) trong MongoDB với explain()

Để phân tích hiệu suất truy vấn MongoDB, bạn sử dụng phương thức explain() trước find() hoặc aggregate(). Nó trả về **Query Plan** chi tiết: index được dùng (IXSCAN) hay quét toàn bộ (COLLSCAN), số bản ghi duyệt, index bounds, v.v. - cực quan trọng cho tuning.

1. Tạo bộ sưu tập, chèn dữ liệu và tạo index

> db.demo408.insertOne({ "Value": 50 });
> db.demo408.insertOne({ "Value": 20 });
> db.demo408.insertOne({ "Value": 45 });
> db.demo408.insertOne({ "Value": 35 });
> db.demo408.createIndex({ Value: 1 }); // Index tăng dần trên Value

2. Xem dữ liệu

> db.demo408.find();

3. Phân tích Query Plan cho truy vấn Value > 40

> db.demo408.explain().find({ Value: { $gt: 40 } });

4. Phân tích kết quả quan trọng (winningPlan)

{
    "queryPlanner": {
        "winningPlan": {
            "stage": "FETCH",                    // Lấy tài liệu sau khi có con trỏ index
            "inputStage": {
                "stage": "IXSCAN",               // QUAN TRỌNG: Dùng Index Scan (tốt)
                "keyPattern": { "Value": 1 },    // Index dùng
                "indexName": "Value_1",
                "indexBounds": {
                    "Value": [ "(40.0, inf.0]" ] // Phạm vi index sử dụng
                }
            }
        },
        "rejectedPlans": []                      // Không có plan bị loại
    },
    "ok": 1
}

Các Stage quan trọng cần nhận diện:

  • COLLSCAN: Collection Scan (Quét toàn bộ) -> **CHẬM**, cần tạo index.
  • IXSCAN: Index Scan -> **Nhanh**, index đang được dùng.
  • FETCH: Lấy tài liệu đầy đủ sau khi index trỏ đến.
  • SORT: Sắp xếp trong bộ nhớ (nếu không có index hỗ trợ sort).
  • PROJECTION: Chiếu trường (covered query nếu chỉ lấy trường trong index).

Chế độ explain: explain("executionStats") (thực thi thật, có thời gian, số docs examined), explain("allPlansExecution") (chi tiết tất cả plan).