22/09/2018, 19:14

Phân tích truy vấn trong MongoDB

Việc phân tích các truy vấn là một khía cạnh rất quan trọng để đánh giá tính hiệu quả của Database và tính hiệu quả của chỉ mục đã thiết kế. Chúng ta sẽ tìm hiểu hai truy vấn được sử dụng thường xuyên nhất là $explain và $hint . Sử dụng $explain trong MongoDB Toán tử $explain cung cấp ...

Việc phân tích các truy vấn là một khía cạnh rất quan trọng để đánh giá tính hiệu quả của Database và tính hiệu quả của chỉ mục đã thiết kế. Chúng ta sẽ tìm hiểu hai truy vấn được sử dụng thường xuyên nhất là $explain$hint.

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})
Quảng cáo

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:

Quảng cáo

Sử dụng $hint trong MongoDB

Toán tử $hint ép Query Optimizer để sử dụng chỉ mục đã xác định để chạy một truy vấn. Nó đặc biệt hữu ích khi bạn muốn kiểm tra hiệu suất của một truy vấn với các chỉ mục khác nhau. Ví dụ, truy vấn sau xác định chỉ mục trên các trường gender và user_name để được sử dụng cho truy vấn này:

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

Để phân tích truy vấn trên, bạn sử dụng toán tử $explain trong MongoDB:

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

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Các bài học lập trình MongoDB phổ biến khác tại code24h:

0