当一个索引是另一个索引的子集时,MongoDB 似乎使用了一种低效的查询模式。
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
在查询 status
、title
和 subtitle
以及在 rating
上排序时都使用第一个索引当只查询 status
和 title
并在 rating
上排序时,即使使用 explain()
和 >hint()
在 javascript 控制台中指出使用第二个索引的速度快 4 倍。
如何告诉 Mongoid 告诉 MongoDB 使用第二个索引?
最佳答案
您可以使用 Mongoid::Criterion::Optional.extras
Mongo::Collection
一个例子:
criteria = Model.where(:status => true, :title => 'hello world').desc(:rating)
criteria.extras(:hint => {:status => 1, :title => 1, :rating => -1})
extras
接受 Mongo::Collection 的任何内容可以处理
关于ruby - 是否可以指定查询应在 Mongoid 中使用的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4558320/