MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Chỉ mục phạm vi ngày Mongo với bộ lọc

Một vài điểm chính từ kết quả giải thích kế hoạch:

  • Truy vấn giải quyết các thuộc tính sau:siteId, status, creationDate, reportCount, assignee, parent
  • Kế hoạch chiến thắng có hai giai đoạn:
    • IX_SCAN sử dụng creationDate_1_reportCount_1_label_1 , điều này sử dụng tra cứu được lập chỉ mục trên creationDatereportCount để xác định 56 tài liệu sau đó được chuyển tiếp đến giai đoạn FETCH
    • FETCH nhận 56 tài liệu từ giai đoạn IX_SCAN và sau đó thẩm vấn các tài liệu này để áp dụng siteId , status , assigneeparent bộ lọc. Cuộc thẩm vấn này khiến 37 tài liệu bị hủy và 19 tài liệu được trả lại.

Vì vậy, chỉ mục của bạn chỉ bao gồm 2 trong số 6 thuộc tính trong truy vấn của bạn và 4 thuộc tính còn lại trong truy vấn của bạn được áp dụng bằng cách kiểm tra tài liệu không phải chỉ mục . Nếu bạn muốn truy vấn này được lập chỉ mục đầy đủ thì hãy tạo chỉ mục sau:

db.collection.createIndex(
    {siteId: 1, status: 1, creationDate: 1, reportCount: 1, assignee: 1, parent: 1}
) 

Nếu bạn chạy lại với chỉ mục này tại chỗ thì bạn sẽ thấy rằng (a) MongoDB chọn chỉ mục này và (b) số lượng tài liệu được chuyển tiếp bởi giai đoạn IX_SCAN cũng giống như số lượng tài liệu được trả về bởi cuộc gọi tìm kiếm của bạn.

Tôi nói "nên tìm" bởi vì có những khía cạnh khác ở đây có thể dẫn đến việc MongoDB chọn một chỉ mục khác, ví dụ:sử dụng $nor và giai đoạn sắp xếp (creationDate: 1 ). Tôi khuyên bạn nên tinh chỉnh chỉ mục và chạy với giải thích 'bật' sau mỗi lần chỉnh sửa và tìm kiếm các mục chính này trong executionStats tài liệu phụ:

  • "nReturned"
  • "totalKeysExamined"
  • "totalDocsExamined"

Một quy tắc chung đơn giản là:totalKeysExamined càng gần là nReturnedtotalDocsExamined càng gần bằng 0 ... mức độ phù hợp chỉ mục của bạn càng tốt.

Ngoài ra còn có câu hỏi về chi phí của một chỉ mục (về tác động đến thời gian ghi và lưu trữ chỉ mục), vì vậy tôi khuyên bạn nên xem xét các yêu cầu phi chức năng của bạn - liệu thời gian trôi qua mong muốn của bạn có thể đạt được mà không có đầy đủ chỉ mục không? Nếu không, thì bạn nên tiến hành thử nghiệm thực nghiệm nhưng hãy chuẩn bị để điều chỉnh lựa chọn của bạn để đáp ứng những gì explain() đầu ra cho bạn biết.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Khu dân cư Mongoose được nhúng

  2. Tìm các điểm gần nhất đến một điểm nhất định với tọa độ và khoảng cách tối đa của nó - Kết quả truy vấn không xác định bằng cách sử dụng Mongoose với MEAN Stack

  3. Làm thế nào để đặt mongo db dbpath trên Windows 7?

  4. Cập nhật Subdocument trong Mongodb lưu trữ (các) id

  5. Mongoose mở rộng xác thực mặc định