- Chuyên mục khác :
- Git cơ bản và nâng cao
- ·
- MySQL cơ bản và nâng cao
- ·
- MongoDB cơ bản và nâng cao
- ·
- SQL cơ bản và nâng cao
- ·
- Linux cơ bản và nâng cao
- Cơ bản về MongoDB
- Học MongoDB cơ bản và nâng cao
- Tổng quan về MongoDB
- Lợi thế của MongoDB
- Cài đặt MongoDB
- Mô hình hóa dữ liệu trong MongoDB
- Tạo Database trong MongoDB
- Xóa Database trong MongoDB
- Tạo Collection trong MongoDB
- Xóa Collection trong MongoDB
- Kiểu dữ liệu trong MongoDB
- Chèn Document trong MongoDB
- Truy vấn Document trong MongoDB
- Cập nhật Document trong MongoDB
- Xóa Document trong MongoDB
- Projection trong MongoDB
- Giới hạn bản ghi trong MongoDB
- Sắp xếp bản ghi trong MongoDB
- Chỉ mục (Index) trong MongoDB
- Aggregation trong MongoDB
- Replica Set trong MongoDB
- Shard trong MongoDB
- Tạo Backup trong MongoDB
- MongoDB Deployment
- Hoạt động MongoDB nâng cao
- Relationship trong MongoDB
- Tham chiếu Database trong MongoDB
- Covered Query trong MongoDB
- Phân tích truy vấn trong MongoDB
- Hoạt động nguyên tử (Atomic Operation) trong MongoDB
- Hoạt động chỉ mục nâng cao trong MongoDB
- Hạn chế của chỉ mục trong MongoDB
- ObjectId trong MongoDB
- Map Reduce trong MongoDB
- Text Search trong MongoDB
- Regular Expression trong MongoDB
- Làm việc với Rockmongo
- GridFS trong MongoDB
- Capped Collection trong MongoDB
- Auto-Increment Sequence 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 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 gender và user_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.
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()
Các bài học lập trình MongoDB phổ biến khác tại s2sontech:
Bình luận (0)