Tôi hiểu rằng với MongoDB, để truy vấn sử dụng chỉ mục phức hợp, nó phải sử dụng TẤT CẢ các khóa trong chỉ mục hoặc ít nhất một số khóa bắt đầu từ bên trái. Ví dụ:Chỉ mục phức hợp Mongo, sử dụng ít hơn tất cả trong truy vấn
db.products.find({ "a":"foo", "b":"bar" })
Sẽ vui vẻ sử dụng chỉ mục được tạo thành từ {a, b, c}.
Tuy nhiên, nếu tôi muốn truy vấn:
db.products.find({"a":"foo", "c":"thing" })
Tôi tin rằng điều này không thể sử dụng các chỉ số. Điều này có thể được giải quyết bằng cách thêm điều kiện tầm thường vào "b", ví dụ:
db.products.find({"a":"foo", "b":{ $ne : "" }, "c":"thing" })
Ngay cả khi tôi không thực sự quan tâm đến giá trị của b. Lý do cho điều này là chúng ta hiện có 45m đối tượng và nó sẽ tiếp tục phát triển vì vậy chúng tôi đang tìm cách củng cố các chỉ mục của mình để tiết kiệm tài nguyên.
Rất cám ơn.
Bạn có thể cho giải thích của các truy vấn này? –
Sự hiểu biết của bạn là đúng trên một chỉ số hợp chất kép, nhưng không nhất thiết phải đúng trong một chỉ số hợp chất ba. Sử dụng giải thích, bạn sẽ thấy rằng chỉ số a, b, c trên thực tế sẽ được sử dụng khi bạn truy vấn trên a, c. –