2012-04-24 5 views
1

저는 MongoDB 2.0.3 (Mongoid를 통해)을 루비 (1.9.3) 응용 프로그램과 함께 사용하고 있습니다.Mongodb가 색인을 사용하지 않고 쿼리합니다.

나는 보이는 복합 인덱스가 같은 :

index [ 
    [:attr1, Mongo::ASCENDING], 
    [:attr2, Mongo::ASCENDING], 
    [:attr3, Mongo::ASCENDING], 
    [:attr4, Mongo::ASCENDING] 
] 

그리고처럼 보이는 쿼리

Model.where(:attr3.ne => true, :attr4.ne => true). 
     extras(:hint => { :attr1 => Mongo::ASCENDING, 
         :attr2 => Mongo::ASCENDING, 
         :attr3 => Mongo::ASCENDING, 
         :attr4 => Mongo::ASCENDING }) 

그리고 내 코드는 결과를 수정하고 업데이트합니다. 위의 루비 응용 프로그램을 실행하는 프로세스가 여러 개 있습니다. 모두 mongodb 서버를 저장합니다. 나는 꽤 큰 DB (30mil 레코드, 95gb 크기 이상)를 가지고 있으며 내 앱이 지속적으로 읽고 쓰고있다.

때로는 쿼리가 인덱스를 사용하고 때로는 (mongo 쉘의 db.currentOp()를 통해) 인덱스를 사용하지 않는 문제가 있습니다. 왜 그런 일이 일어나고 어떻게 해결할 수 있습니까?

답변

3

다중 키 색인을 만들 때 순서가 중요합니다. 색인에 첫 번째 키 (attr1 및 attr2)를 포함시키지 않으면 MongoDB에서 색인을 사용할 수 없습니다. 상상해보십시오. 사전에 물리적 인 단어가 있고 세 번째 문자가 'a'이고 네 번째 문자가 'b'인 단어를 찾으려면 사전의 알파벳순으로는별로 도움이되지 않을 것이라고 상상해보십시오.

attr3 및 attr4를 기반으로 문서를 조회하려면 attr3 및 attr4가 색인의 첫 번째 키인 다중 키 색인이 필요합니다.

+0

설명 해 주셔서 감사합니다. – gylaz

관련 문제