我有一个关于mongodb索引的问题。 假设我们有两个模型:
class Book
include Mongoid::Document
field :user_id
field :borrower_id
belongs_to :user
end
class User
include Mongoid::Document
has_many :books
end
如果我想找到一些书:
current_user.books.roder_by(:created_at.desc)
我应该为Book
创建哪个索引index({user_id: 1, created_at: -1})
或
index({user_id: 1})
index({created_at: -1)
为什么?
答案 0 :(得分:0)
由于MongoDBs(新)索引交叉中的许多限制,我会选择复合索引,这意味着不能单独使用两个索引来查找和排序查询:http://docs.mongodb.org/manual/core/index-intersection/#index-intersection-and-sort在这种情况下是这样的两个单独的索引不是最佳的回答您的查询,只使用一个索引,大多数情况下它将是内存排序限制为32MB的RAM。
值得注意的是,ndex交叉始终是最后的选择。只有在无法通过性能创建复合索引来覆盖查询时才应该这样做,因为交叉开始时非常昂贵。