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

chiến lược chỉ mục mongodb cho truy vấn phạm vi với các trường khác nhau

Thêm một chút nữa vào baloo câu trả lời của.

Về vấn đề thời gian so với dài hạn. Nói chung máy chủ MongoDB sẽ không thấy sự khác biệt. Độ dài mã hóa BSON là như nhau (64 bit). Bạn có thể thấy hiệu suất khác nhau ở phía máy khách tùy thuộc vào mã hóa của trình điều khiển. Ví dụ:về phía Java, sử dụng trình điều khiển 10gen một dấu thời gian được hiển thị dưới dạng Date nặng hơn nhiều so với Long . Có trình điều khiển cố gắng tránh chi phí đó.

Vấn đề khác là bạn sẽ thấy sự cải thiện hiệu suất nếu bạn đóng phạm vi cho trường đầu tiên của chỉ mục. Vì vậy, nếu bạn sử dụng chỉ mục do baloo đề xuất :

db.collection.ensureIndex({start: 1, final: 1})

Truy vấn của bạn sẽ hoạt động (có khả năng tốt hơn nhiều) nếu bạn truy vấn là:

db.collection.find({start:{$gt:DateTime(...),$lt:DateTime(...)}, 
                    final:{$lt:DateTime(...)}})

Về mặt khái niệm, nếu bạn coi các chỉ mục như một cây thì phạm vi đóng sẽ giới hạn cả hai phía của cây thay vì chỉ một phía. Nếu không có phạm vi đóng, máy chủ phải "kiểm tra" tất cả các mục nhập bằng start lớn hơn dấu thời gian được cung cấp vì nó không biết mối quan hệ giữa startfinal .

Bạn thậm chí có thể thấy rằng hiệu suất truy vấn không tốt hơn bằng cách sử dụng một chỉ mục trường đơn lẻ như:

db.collection.ensureIndex({start: 1})

Phần lớn số tiền tiết kiệm được là từ việc cắt tỉa cánh đồng đầu tiên. Trường hợp sẽ không xảy ra là khi truy vấn được bao phủ bởi chỉ mục hoặc thứ tự / sắp xếp cho các kết quả có thể được bắt nguồn từ chỉ mục.

HTH - Rob.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cấu trúc dữ liệu tốt nhất để lưu trữ dữ liệu này trên mongoDB là gì?

  2. Dừng mongodb bỏ qua các ký tự đặc biệt?

  3. Cách định dạng số bằng dấu phẩy trong SQL

  4. Thay đổi chữ in hoa trong mongo thành cách viết hoa lạc đà?

  5. Tính giá trị trung bình của một tài liệu mongodb