Nếu một truy vấn có thể được thỏa mãn bởi nhiều chỉ mục được xác định trong bộ sưu tập, MongoDB sẽ kiểm tra tất cả các chỉ mục áp dụng song song. Chỉ mục đầu tiên có thể trả về 101 kết quả sẽ được người lập kế hoạch truy vấn chọn. Có những khía cạnh khác để lựa chọn chỉ mục, nhưng nói chung điều này đúng theo Tối ưu hóa Truy vấn tài liệu.
Phương pháp lựa chọn chỉ mục này có thể chọn một chỉ số phụ tối ưu. Điều này là do theo quan điểm của MongoDB, bạn có nhiều chỉ mục mô tả cùng một thứ. Để giảm thiểu lựa chọn chỉ mục tối ưu phụ mà bạn đã quan sát, bạn có thể thực hiện:
-
Xóa tất cả các chỉ mục khác mà bạn phát hiện ra là dưới mức tối ưu.
Điều này nhằm đảm bảo rằng người lập kế hoạch truy vấn không có lựa chọn nào khác ngoại trừ việc chọn các chỉ mục mà bạn đã điều chỉnh cho phù hợp với truy vấn của mình.
-
Sử dụng
hint()
phương pháphint()
cho phép bạn thông báo rõ ràng cho MongoDB sử dụng chỉ mục được chỉ định cho truy vấn. Ví dụ:db.tasks.find(...).hint({project: 1, created_by: 1})
Vui lòng xem https://docs.mongodb.com/v2. 6 / tham chiếu / toán tử / meta / gợi ý / để biết thêm thông tin về
hint()
.
Một sắc thái khác trong truy vấn của bạn là nó bao gồm $or
nhà điều hành. Trong trường hợp này, mọi thuật ngữ trong $or
biểu thức phải có chỉ mục được liên kết với nó , nếu không MongoDB sẽ thực hiện quét bộ sưu tập (BasicCursor
trong MongoDB 2.6 điều khoản). Điều này được giải thích chi tiết hơn tại https:// docs .mongodb.com / v2.6 / tham chiếu / toán tử / truy vấn / hoặc / # hành vi