关于mongodb索引

关于mongodb索引,mongodb,mongoid,mongodb-indexes,Mongodb,Mongoid,Mongodb Indexes,我有一个关于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_a

我有一个关于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)
我应该为这本书创建哪个索引

index({user_id: 1, created_at: -1})


为什么呢?

我会选择复合索引,因为MongoDB(新)索引交叉中存在许多限制,这意味着两个索引不能单独用于查询的查找和排序:因此,在这种情况下,两个单独的索引不是回答查询的最佳索引,只会使用一个索引,最有可能的是,它将是一个内存排序限制为32MB的RAM


值得注意的是,ndex交叉始终是最后的手段。只有在无法高效地创建复合索引来覆盖查询时,才应该这样做,因为交叉操作一开始就非常昂贵。

复合索引,因为MongoDB无法使用索引intersectionijng进行排序和查找,因此后两个索引将是回答查询的最佳选择。当然,不管怎样,指数互换都是次优的
index({user_id: 1})
index({created_at: -1)