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

Truy vấn MongoDB đơn giản rất chậm mặc dù chỉ mục được thiết lập

Bạn không có bất kỳ chỉ mục nào mà mongo sẽ tự động sử dụng cho việc đó, vì vậy nó đang thực hiện quét toàn bộ bảng.

Như đã đề cập trong tài liệu

Tại sao

Nếu bạn có chỉ mục trên a, b - và bạn tìm kiếm theo a một mình - một chỉ mục sẽ tự động được sử dụng. Điều này là do đây là thời điểm bắt đầu của chỉ mục (việc này diễn ra nhanh chóng), db chỉ có thể bỏ qua phần còn lại của giá trị chỉ mục.

Chỉ mục trên a, b không hiệu quả khi tìm kiếm theo b đơn giản chỉ vì nó không cung cấp khả năng sử dụng tìm kiếm chỉ mục với "bắt đầu với chuỗi này".

Vì vậy, một trong hai:

  • Bao gồm _reference_1_id trong truy vấn (có thể không liên quan)
  • HOẶC thêm chỉ mục trên _reference_2_id (nếu bạn truy vấn theo trường thường xuyên)
  • HOẶC sử dụng một gợi ý

Gợi ý

Có thể là lựa chọn chi phí thấp nhất của bạn ngay bây giờ.

Thêm gợi ý truy vấn để buộc sử dụng _reference_1_id_1__reference_2_id_1_id_1 của bạn mục lục. Điều này có thể nhanh hơn rất nhiều so với quét toàn bộ bảng, nhưng vẫn chậm hơn rất nhiều so với chỉ mục bắt đầu với trường bạn đang sử dụng trong truy vấn.

tức là

db.mycoll
    .find({"_reference_2_id" : ObjectId("jkl7890123456")})
    .hint("_reference_1_id_1__reference_2_id_1_id_1");


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tìm nạp mảng d3.js từ url

  2. Tôi có cần khử trùng đầu vào của người dùng trước khi chèn vào MongoDB không (MongoDB + Node js combo)

  3. Sử dụng ObjectId mongo làm id của người dùng có phải là một thực tiễn xấu?

  4. React.js:Chuỗi HTML thô không được nhận dạng là các phần tử HTML từ Node.js

  5. nhiều toán tử cập nhật mongo trong một câu lệnh?