Tôi có một truy vấn MongoDB mà tôi đang cố gắng tối ưu hóa. Tôi đã tạo ra một chỉ mục phù hợp với các trường trong truy vấn, nhưng dường như tôi không nhận được kế hoạch truy vấn MongoDB để sử dụng chỉ mục mà không có hint()
rõ ràng, mặc dù các số nscanned
và milli
s là tốt hơn cho phiên bản được gợi ý.Tại sao MongoDB không sử dụng đúng chỉ mục?
Dưới đây là các chỉ số, truy vấn (có và không có gợi ý), và một tiết giải thích:
http://paste.roguecoders.com/p/4face5649612e840da04c5fea0491c9b.txt
Một chút thêm thông tin: chỉ số này nằm trong một bộ sưu tập lớn-ish, trong một bộ bản sao, vì vậy tôi đã xây dựng chỉ mục bằng cách sử dụng offline method. Nó bây giờ có mặt trong tất cả các nút.
(Nguyên đăng trên MongoDB-User.)
Điều gì sẽ xảy ra nếu bạn tạo chỉ mục: 'owner_1_date_-1_from_backup_1'? – Sammaye
Chỉ mục của tôi là đúng. Tôi đang sắp xếp vào 'ngày'. (Và 'hint()' xác nhận rằng nó tốt hơn.) Nó cũng mất hơn một giờ để lập chỉ mục bộ sưu tập này trên tập dữ liệu sản xuất của chúng tôi, vì vậy tôi không sẵn sàng thử những thứ mà không có lý do chính đáng. (-: – scoates
Liên kết này có thể giải thích tại sao bạn nhận được 'scanAndOrder' http://blog.mongolab.com/2012/06/cardinal-ins/ nó cũng có thể giải thích tại sao MongoDb không thấy chỉ mục được tạo của bạn là tối ưu – Sammaye