MongoDB có vẻ như nó đang sử dụng mẫu truy vấn không hiệu quả khi một chỉ mục là một tập con của một chỉ mục khác.Có thể chỉ định truy vấn nào sẽ sử dụng chỉ mục trong Mongoid không?
class Model
field :status, :type => Integer
field :title, :type => String
field :subtitle, :type => String
field :rating, :type => Float
index([
[:status, Mongo::ASCENDING],
[:title, Mongo::ASCENDING],
[:subtitle, Mongo::ASCENDING],
[:rating, Mongo::DESCENDING]
])
index([
[:status, Mongo::ASCENDING],
[:title, Mongo::ASCENDING],
[:rating, Mongo::DESCENDING]
])
end
Chỉ số đầu tiên đang được sử dụng cả khi truy vấn trên status
, title
và subtitle
và phân loại trên rating
và khi truy vấn trên chỉ status
và title
và phân loại trên rating
mặc dù sử dụng explain()
cùng với hint()
ở các bang console javascript sử dụng chỉ mục thứ hai nhanh gấp 4 lần.
Làm thế nào tôi có thể yêu cầu Mongoid nói MongoDB sử dụng chỉ mục thứ hai?
Hm, thú vị. Theo như tôi biết mongodb chỉ có thể sử dụng một chỉ mục. Vì vậy, có một chút khó hiểu tại sao bạn đặt băm vào giá trị gợi ý của bạn – Ph0en1x
Giá trị gợi ý băm có tương ứng với [[: trạng thái, Mongo :: ASCENDING], [: tiêu đề, Mongo :: ASCENDING], [: rating, Mongo: : DESCENDING]] chỉ mục, do đó, nó vẫn chỉ sử dụng một chỉ số duy nhất –
vì vậy nó là chỉ số compaund? từ trạng thái, tiêu đề và xếp hạng. Ok, sau đó tôi thấy. – Ph0en1x