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

Sắp xếp trên nhiều trường mongo DB

Trình tối ưu hóa truy vấn MongoDB hoạt động bằng cách thử các kế hoạch khác nhau để xác định cách tiếp cận nào hoạt động tốt nhất cho một truy vấn nhất định. Kế hoạch chiến thắng cho mẫu truy vấn đó sau đó sẽ được lưu vào bộ nhớ đệm cho ~ 1.000 truy vấn tiếp theo hoặc cho đến khi bạn thực hiện explain() .

Để hiểu những kế hoạch truy vấn nào đã được xem xét, bạn nên sử dụng explain(1) , ví dụ:

db.col.find({category:'A'}).sort({updated: -1}).explain(1)

allPlans chi tiết sẽ hiển thị tất cả các kế hoạch đã được so sánh.

Nếu bạn chạy một truy vấn không có tính chọn lọc cao (ví dụ:nếu nhiều bản ghi khớp với tiêu chí của bạn về {category: { $ne:'A'}} ), MongoDB có thể nhanh hơn để tìm kết quả bằng cách sử dụng BasicCursor (quét bảng) thay vì so khớp với chỉ mục.

Thứ tự của các trường trong truy vấn thường không tạo ra sự khác biệt cho việc lựa chọn chỉ mục (có một vài ngoại lệ với các truy vấn phạm vi). Thứ tự của các trường trong một sắp xếp có ảnh hưởng đến việc lựa chọn chỉ mục. Nếu sort() của bạn tiêu chí không khớp với thứ tự chỉ mục, dữ liệu kết quả phải được sắp xếp lại sau khi sử dụng chỉ mục (bạn sẽ thấy scanAndOrder:true trong đầu ra giải thích nếu điều này xảy ra).

Cũng cần lưu ý rằng MongoDB sẽ chỉ sử dụng một chỉ mục cho mỗi truy vấn (ngoại trừ $or s).

Vì vậy, nếu bạn đang cố gắng tối ưu hóa truy vấn:

db.col.find({category:'A'}).sort({updated: -1, rating: -1})

Bạn sẽ muốn bao gồm cả ba trường trong chỉ mục:

db.col.ensureIndex({category: 1, updated: -1, rating: -1})

FYI, nếu bạn muốn buộc một truy vấn cụ thể sử dụng một chỉ mục (nói chung là không cần thiết hoặc được khuyến nghị), thì có hint() tùy chọn bạn có thể thử.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nhận dấu thời gian từ id mongodb

  2. Làm cách nào để thay đổi tất cả các phần tử mảng trong tài liệu mongodb thành một giá trị nhất định?

  3. Các chế độ nhập của mongoimport

  4. Đang nhập tệp JSON bằng mongimport, tiếp tục nhận được `số nhận dạng không mong muốn '?

  5. MongoDB và Robomongo:Không thể kết nối (xác thực)