2013-08-27 2 views
0

레일 껌을 사용하고 몽고 이드를 사용하고 있습니다. 내 레일 앱에 Mongoid::Document 계정을 만들었습니다.
계정 문서에 많은 양의 레코드가 있습니다. 쿼리를 빠르게 수행하기 위해 복합 인덱스가 추가되었습니다. 그러나 응용 프로그램의 성능이 좋지 않습니다.
쿼리에 대한 설명을 시도했지만 indexOnly 속성은 false 값으로 표시됩니다.MongoDB 쿼리 및 색인을 사용하여 결과를 더 빠르게 얻는 방법

복합 색인을 만드는 가장 좋은 방법은 누구에게 알려주십시오.
작성한 쿼리가 인덱스를 제대로 사용하고 있는지 확인할 수 있습니까?

여기

first_record = Account.where(column_1: 5, column_2: "xxxx", column_3: "xxxxxx", column_4: "xxxxxxxxxxx", column_5: "xxxxxxxxx") 다음과 같은 방법으로

first_record.explain() => {"cursor"=>"BtreeCursor provider_5_params_idx", "isMultiKey"=>false, "n"=>10320, "nscannedObjects"=>10320, "nscanned"=>10320, "nscannedObjectsAllPlans"=>10320, "nscannedAllPlans"=>10320, "scanAndOrder"=>false, "indexOnly"=>false, "nYields"=>317, "nChunkSkips"=>0, "millis"=>222464, "indexBounds"=>{"column_1"=>[[5, 5]], "column_2"=>[["xxxx", "xxxx"]], "column_3"=>[["xxxxx", "xxxxx"]], "column_4"=>[["pxxxx", "xxxxxxx"]], "column_5"=>[["xxxxxx", "xxxxxx"]]}, "allPlans"=>[{"cursor"=>"BtreeCursor provider_5_params_idx", "n"=>10320, "nscannedObjects"=>10320, "nscanned"=>10320, "indexBounds"=>{"column_1"=>[[5, 5]], "column_2"=>[["xxxx", "xxxx"]], "column_3"=>[["xxxx", "xxxx"]], "column_4"=>[["xxxx", "xxxxx"]], "column_5"=>[["xxxxx", "xxxxx"]]}}], "oldPlan"=>{"cursor"=>"BtreeCursor provider_5_params_idx", "indexBounds"=>{"column_1"=>[[5, 5]], "column_2"=>[["xxxx", "xxxx"]], "column_3"=>[["xxxxx", "xxxxx"]], "column_4"=>[["xxxx", "xxxxx"]], "column_5"=>[["xxxxx", "xxxxx"]]}}, "server"=>"xxxxxxxxx"}

또한 내가 만든 인덱스 내 쿼리

입니다. 그것은 당신이 지수가 두 번 column_1 오타
db.account.ensureIndex({column_1:1,column_2:1,column_3:1,column_4:1,column_5:1}, {name:"provider_5_params_idx",background:true});

+0

설명에서 볼 수있는 것처럼 이름순으로 색인을 사용하고 있습니다. 그러나, 어떤 이유로 든 그것을 사용하는 것이 아닙니다. – WiredPrairie

답변

0

인가?

10320 개체가 계획과 비슷하게 스캔된다는 사실은 인덱스가 작동하지 않는다는 사실입니다.

+0

예, 댓글에 잘못된 색인 이름을 썼습니다.하지만 이제는 텍스트를 수정했습니다. – AnitaB

관련 문제