Dùng explain('executionStats') và đọc ba con số trước, phần còn lại tính sau.
js
db.orders.find({ userId: 12, status: 'paid' }).explain('executionStats')stage:COLLSCANnghĩa là quét toàn bộ collection — thiếu index.IXSCANlà đang dùng index.totalDocsExaminedso vớinReturned: đọc 500.000 document để trả về 20 là dấu hiệu index sai hoặc không đủ chọn lọc. Tỉ lệ lý tưởng gần 1:1.executionTimeMillis: thời gian thực thi thật của kế hoạch đã chọn.
Hai chi tiết hay bị bỏ qua:
- SORT stage xuất hiện nghĩa là MongoDB sắp xếp trong bộ nhớ, không dùng index để sort.
- rejectedPlans cho biết optimizer đã cân nhắc index nào rồi loại — hữu ích khi query dùng nhầm index.
explain() mặc định (queryPlanner) chỉ cho biết kế hoạch, không chạy thật nên không có số liệu; muốn số liệu phải truyền executionStats.