2014-09-24 2 views
0

나는 다음 컬렉션 샘플이 있습니다몽고에 geoIndex 성능을 향상

{ 
    "cursor" : "S2NearCursor", 
    "isMultiKey" : false, 
    "n" : 10000, 
    "nscannedObjects" : 48846, 
    "nscanned" : 48846, 
    "nscannedObjectsAllPlans" : 48846, 
    "nscannedAllPlans" : 48846, 
    "scanAndOrder" : false, 
    "indexOnly" : false, 
    "nYields" : 0, 
    "nChunkSkips" : 0, 
    "millis" : 95, 
    "indexBounds" : { 

    }, 
    "filterSet" : false 
} 
: 스키마 성능 결과는 다음 중 하나입니다

db.test.find({"locatedAt":{"$near":{"$geometry":{"type":"Point","coordinates":[2.240413,41.582159]}}}}).explain(); 

을 평가하기 위해 내가 10.000 행을 삽입

var testSchema = new Schema({ 
title:   {type: String, required: true}, 
owner:   {type:Schema.Types.ObjectId}, 
locatedAt:  {type: {}, index: '2dsphere', sparse: true, "2dsphereIndexVersion": 2, required: true} 
}); 

같은 결과로 "2d"색인을 만들려고했습니다.

내 의견으로 요약하면 쿼리가 너무 많은 행을 스캔하고 있습니다. 내가 잘못하고있는 것은 무엇입니까? 스키마 정의일까요?

감사합니다.

+0

에 가면

의 nscanned * 수는 문서가 없습니다 . 그것들은 지리 정보 색인에 내부적으로 중요한 정보를 나타냅니다. 중요하지는 않습니다. 중요한 것은 여전히 ​​작업량에 비례하므로 지리적 쿼리를 비교하는 데 사용할 수 있다는 것입니다. 보고 된 시간은 모든 10000 워드 프로세서를 얻으려면 95ms입니다. 따라서 쿼리가 잘 수행됩니다 (참고 : 실제로 타이밍 정보를 설명 할 때 밀리 필드를 실제로 사용하지 마십시오). – wdberkeley

+0

의견을 보내 주셔서 감사합니다. 나는 오늘 ('설명'필드의 의미를 배우는) 정보를 평가하고 제한이나 제약 조건을 포함하면 네 스캔 된 데이터가 맞고 밀리 스가 4로 바뀜을 계속했습니다. 발견, 그것은 스키마 정의의 필터에 문제가되지 않았습니다. –

답변

0

'Explain'문서와 블로그의 일부 항목을 평가 한 후에 색인 문제 또는 스키마 정의 문제가 아닌 것으로 결론을 내릴 필요가 있습니다. 당신이 nscanned 객체가 36 (제한 10)와 milis에 약 50,000 개체에서 내려가는 제한 제약 조건을 포함 아래로 지리 인덱스 4.

관련 문제