2011-08-01 4 views
1

MongoDB를 시작하면서 색인이 어떻게 작동하는지 이해하려고합니다. 컬렉션에 항목 목록이 있습니다. 각 항목에는 증가하는 버전이 있습니다. 그런 다음 모든 이전 버전 (현재 버전 미만)이 제거됩니다 (두 버전을 잠시 사용 가능하도록 레코드가 업데이트되지 않음). 항목 ID와 버전에 복합 색인이 있습니다. 제거를 위해, $ ne 대 $ lt 중 어느 것을 사용하는지에 따라 성능면에서 차이가 있습니까?

아니 겠지만, 확인하고 싶습니다.

답변

4

$lt 구현의 세부 사항을 모르는 경우 $ne보다 효율적일 수 있습니다. B 트리 인덱스에서 $ne은 두 개의 범위 스캔 ($lt$gt)이되는 반면 $lt은 하나입니다.

그러나 귀하의 경우 $lt (어쨌든 이전 버전을 찾으려면) 원하는 것 같습니다. $ne을 사용했다면 우연히 버전을 제거 할 수 있습니다. 실제로는 존재하지 않지만 실제로 생성되었을 수도 있습니다. MongoDB는 문서 전체에서 트랜잭션이나 일관된 뷰를 지원하지 않는다는 것을 기억하십시오. 동시 업데이 트가 당신을 여기에 물 수도 있습니다.

1

실제로 큰 차이가 있습니다. "$ne and $nin operators are not selective"은 인덱스가 쿼리의 해당 부분을 전혀 빠르게하지 않음을 의미합니다. 따라서 $ ne를 사용하면 MongoDB에서는 복합 인덱스의 버전 부분을 사용하지 않습니다.

관련 문제