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

Trong MongoDB, tôi đang sử dụng một truy vấn lớn, cách tôi sẽ tạo chỉ mục kết hợp hoặc chỉ mục đơn, Vì vậy, thời gian phản hồi của tôi tăng lên

Nói chung, bạn sẽ muốn đặt một chỉ mục trên các trường được sử dụng nhiều nhất làm tiêu chí lọc trong các truy vấn quan trọng / thường xuyên nhất của mình, trước tiên hãy bắt đầu với các trường được chọn lọc nhiều nhất. Có một số hướng dẫn khá phù hợp về chủ đề này như một phần của tài liệu MongoDB . Một tuyên bố đặc biệt quan tâm trong đó cho trường hợp của bạn có thể là điều này vì bạn có rất nhiều $or s:

Tuy nhiên, điều quan trọng nhất ở đây là đo lường, đánh giá, đo lường và xem xét các kế hoạch thực thi truy vấn bằng cách sử dụng giải thích () . Lý do là rất có thể bạn sẽ có các loại truy vấn khác nhau mà ứng dụng của bạn cần hỗ trợ và bạn sẽ cần phải đánh đổi tại một số thời điểm mà bạn phải lựa chọn giữa chi phí duy trì chỉ mục (ví dụ: ghi khóa trong quá trình cập nhật chỉ mục và yêu cầu dung lượng đĩa) và giải pháp nhanh nhất về mặt lý thuyết trong đó tất cả các trường được sử dụng trong một truy vấn đều được bao phủ bởi một chỉ mục duy nhất.

Toàn bộ chủ đề lập chỉ mục đó hơi mờ nhạt phụ thuộc nhiều vào kịch bản chính xác của bạn:

  • Dữ liệu của bạn có được cập nhật nhiều và quá trình ghi có cần phải siêu nhanh (bạn sẽ muốn chỉ mục ít hơn / nhỏ hơn) hay dữ liệu của bạn khá ổn định với các lần đọc thường xuyên phải nhanh (đi với nhiều chỉ mục hơn / lớn hơn)?
  • Bạn cần hỗ trợ những loại truy vấn nào? Chúng giống nhau như thế nào về bộ lọc của chúng? Một số kết hợp bộ lọc nhất định có nhiều khả năng hơn những bộ lọc khác không? Truy vấn nào cần hoạt động tốt, truy vấn nào có thể chậm hơn một chút?
  • Dữ liệu trong các trường có thể được lập chỉ mục của bạn được phân phối như thế nào?
  • và v.v. ...

Bạn sẽ không tìm thấy chỉ mục duy nhất giúp tất cả các truy vấn của bạn hoạt động tốt nhất. Ngoài ra, khi thêm nhiều chỉ mục hoặc thay đổi các chỉ mục hiện có, điều này có thể khiến trình tối ưu hóa truy vấn ngừng sử dụng một số chỉ mục cho một số truy vấn và chọn một kế hoạch thực thi khác để thay thế có thể mong muốn hoặc không. Vì vậy, hãy đo lường mọi thứ quan trọng khi có bất kỳ thay đổi nào đối với việc lập chỉ mục hoặc bố cục dữ liệu vật lý của bạn (thiết lập phần cứng, sharding ...). Cuối cùng, bạn nên đo lường hiệu suất truy vấn của mình một cách thường xuyên khi lượng dữ liệu của bạn tăng lên trừ khi dữ liệu đó đồng nhất trong phân phối.

Để cắt ngắn một câu chuyện dài:Hãy chuyển sang cách tiếp cận lặp lại và bắt đầu bằng cách thêm một chỉ mục (Tôi khuyên bạn nên thêm một chỉ mục vào isBlockedByAdmin , isDeleteinformation.shares.userId ) sau đó đo lường hiệu suất truy vấn của bạn và sau đó tinh chỉnh chỉ mục của bạn dựa trên những phát hiện của bạn (lặp đi lặp lại, ...).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chèn tài liệu trong mongodb với trường autoincrement từ java

  2. MongoDB không tuân thủ ACID trước phiên bản v4 thực sự có nghĩa là gì?

  3. ClassCastException trong khi tra cứu JNDI cho MongoDB, bên trong WAB, chạy Liberty

  4. Kiểm tra xem giá trị có tồn tại trong bộ sưu tập mongo không

  5. Đăng ký không hoạt động - Máy chủ trả về Mã lỗi 404