2013-04-23 33 views
5

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ố nscannedmilli 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.)

+0

Điều gì sẽ xảy ra nếu bạn tạo chỉ mục: 'owner_1_date_-1_from_backup_1'? – Sammaye

+0

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

+2

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

Trả lời

3

này có vẻ là một hồi quy trong 2,4 mà ảnh hưởng đến SERVER-5063 sửa chữa khi một trong các giá trị trong {$ tại: []} khoản là "vô giá trị". Tôi đã nộp nó làm vé mới https://jira.mongodb.org/browse/SERVER-9495 mà tôi hy vọng sẽ được phân loại và sửa chữa sớm.

Trong khi đó, tùy thuộc vào lý do tại sao có giá trị null (hoặc không có trường?) Cùng với đúng/sai, bạn có một số tùy chọn, một số liên quan đến việc thay đổi truy vấn một số thay đổi dữ liệu. Tôi sẽ không tư vấn hạ cấp xuống 2,2 chỉ cho điều đó, nhưng nó cũng là một khả năng.

Các vấn đề liên quan