关于mongodb指数

时间:2015-01-15 08:21:05

标签: 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_at.desc)

我应该为Book

创建哪个索引
index({user_id: 1, created_at: -1})

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

为什么?

1 个答案:

答案 0 :(得分:0)

由于MongoDBs(新)索引交叉中的许多限制,我会选择复合索引,这意味着不能单独使用两个索引来查找和排序查询:http://docs.mongodb.org/manual/core/index-intersection/#index-intersection-and-sort在这种情况下是这样的两个单独的索引不是最佳的回答您的查询,只使用一个索引,大多数情况下它将是内存排序限制为32MB的RAM。

值得注意的是,ndex交叉始终是最后的选择。只有在无法通过性能创建复合索引来覆盖查询时才应该这样做,因为交叉开始时非常昂贵。