2015-01-15 3 views
2

나는 mongodb 색인에 대해 하나의 질문이 있습니다. 내가 어떤 책을 찾을 수 wonner 경우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) 
인덱스 i가 예약

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

또는

위해 작성해야

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

왜?

+0

MongoDB 이후의 복합 색인은 sort와 find에 대해 색인 intersectionijng를 사용할 수 없으므로 후자의 두 색인은 별도로 쿼리에 응답하기에 최적 일 수 있습니다. 물론 색인 연동은 어쨌든 차선이 될 것입니다. – Sammaye

답변

0

MongoDBs (새) 인덱스 교차 내에서 여러 가지 제한 사항으로 인해 복합 인덱스가 필요합니다. 즉 두 개의 인덱스를 찾아서 정렬을 위해 따로 사용할 수 없음을 의미합니다. http://docs.mongodb.org/manual/core/index-intersection/#index-intersection-and-sort 같은 경우 두 개의 개별 인덱스 쿼리에 응답하는 데 최적이 아니며 하나의 인덱스 만 사용됩니다. 32MB RAM으로 제한된 메모리 내 정렬이 가장 적합합니다.

ndex 교차점은 항상 최후의 수단이라는 점에 유의하는 것이 좋습니다. 교차를 시작하는 데 비용이 많이 들기 때문에 쿼리를 처리 할 수있는 복합 인덱스를 효율적으로 만들 수없는 경우에만해야합니다.