2013-03-25 3 views
0

컬렉션의 모든 문서에 대해 새 필드를 삽입하려고합니다. "user_id"필드에 오름차순 색인이 있습니다.몽고 인덱스 필드의 업데이트/삽입

a) 색인을 사용하여 업데이트/삽입되는 필드가 색인에 포함되거나 포함되어야합니까? b) 또한 범위 연산을 수행하지 않는다는 점을 감안할 때이 경우 해시 인덱스가 더 효율적입니다.

db.collA.update( { user_id: 123 } 
       , { $set : { newfield : "something" } } 
       , { multi:true}) 
+0

색인을 업데이트하고 디스크 문서의 실제 내용을 절대 업데이트하지 않는 한 업데이트 된 필드를 색인에 넣는 것은 쓸모가 없습니다. 해시 인덱스에 관해서는 비록 당신이 해시 인덱스를 사용한다고 할지라도 MongoDB는이 값의 범위 내에있는 btree의 부분을 통과하는 정확한 값을 찾기 위해 여전히 내부 범위 쿼리를 수행합니다 (1 ~ 1000의 범위가 123에 해당한다고 말한 다음 정확한 값을 찾기 위해 일종의 이진 검색을 수행합니다. 해시 인덱스를 사용하면 필요한 세그먼트 대신 RAM에 전체 인덱스를로드 할 수 있습니다. 감사합니다. – Sammaye

+0

. 몽고 지수에서 읽은 무작위적인 것들을 모으려고했다. 당신은 이것을 대답으로 만들어야하고 그것을 받아 들일 것입니다. – smartnut007

+0

해시 인덱스에 대한 지난 몇 버전에서 변경된 내용을 놓친 것 같습니다. 간과 한 너겟이 있는지 확인하겠습니다. – Sammaye

답변

0

질문의 A 부분 응답 : 번호 삽입을하거나 실제로 인덱스에 대한 성능 문제가 발생할 수 있습니다 기존 문서의 인덱스 속성을 업데이트. 큰 배치에서이 작업을 수행하려는 경우 작업 후 인덱스를 다시 작성하거나 복구해야합니다.

파트 B : 표준 색인 유형은이 유스 케이스를 잘 다룹니다. 그러나 "user_id"가 문서의 "_id"로 간주 할 수있는 문서를 진정으로 식별하는 경우 이는 다소 진보 된 디자인 결정이며 컬렉션 (양수 및 음수)에 영향을 미칩니다.