programing

Mongodb 통합 프레임워크:$group은 인덱스를 사용합니까?

iphone6s 2023. 5. 27. 09:55
반응형

Mongodb 통합 프레임워크:$group은 인덱스를 사용합니까?

통합 프레임워크를 사용하려고 합니다.$match그리고.$group단상들한다$group단계별 사용 지수 데이터? 버전을 - 나는최 mongodb 사전용있습고니다하버을신.2.5.4

$group인덱스 데이터를 사용하지 않습니다.

mongoDB 문서에서:

$match 및 $sort 파이프라인 연산자는 파이프라인 시작 시 인덱스를 활용할 수 있습니다.

$geoNear 파이프라인 운영자는 지리공간 인덱스를 활용합니다.$geoNear를 사용하는 경우 $geoNear 파이프라인 작업이 집계 파이프라인의 첫 번째 단계로 나타나야 합니다.

Tacca, 기준 @Arthur Tacca, Mongo 4.0 준$sort의 의앞$group속도를 크게 높일 것입니다.https://stackoverflow.com/a/56427875/92049 을 참조하십시오.

알 수 있듯이, 4J41은$group하지 않습니다).$sort파이프라인의 첫 번째 단계일 경우 수행합니다.하지만, 그것은 가능해 보입니다.$group원칙적으로, 그것이 즉시 다음을 따르는 경우, 최적화된 구현을 가질 수 있습니다.$sort이 경우 당신은 지수를 효과적으로 사용할 수 있습니다.$sort사전에

어느 쪽이든 문서에는 다음과 같은 것에 대한 명확한 답변이 없는 것 같습니다.$group이 최적화 기능을 갖추고 있습니다(그렇다고 해도 있다면 있을 것이므로 그렇지 않음을 시사합니다).정답은 MongoDB bug 4507에 있습니다:$group이 구현이 없으므로 4J41의 답변의 맨 위 줄이 결국 맞습니다.효율성이 정말로 필요한 경우 응용 프로그램에 따라 일반 쿼리를 사용하고 클라이언트 코드에서 그룹화를 수행하는 것이 가장 빠를 수 있습니다.

편집: 세바스찬의 대답이 말해주듯이, 실제로는 를 사용하는 것 같습니다.$sort할 수 것) 에 있는 (인덱스를 이용할 수 있는 것)$group속도를 크게 향상시킬 수 있습니다.위의 버그는 아직 열려 있어서 인덱스를 최대한 활용하지 못하고 있는 것 같습니다(즉, 항목이 로드될 때 항목을 모두 메모리에 먼저 로드하는 것이 아니라 그룹화하기 시작함).하지만 그것은 여전히 할 가치가 있습니다.

Mongo의 4.2달러 그룹 문서에 따르면 $first에 대한 특별한 최적화가 있습니다.

각 그룹의 첫 번째 문서를 반환하는 최적화

파이프라인이 동일한 필드별로 정렬 및 그룹화되고 $group 단계에서 $first 누산기 연산자만 사용하는 경우 정렬 순서와 일치하는 인덱스를 그룹화된 필드에 추가하는 것이 좋습니다.경우에 따라 $group 단계에서 색인을 사용하여 각 그룹의 첫 번째 문서를 빠르게 찾을 수 있습니다.

$group 단계의 각 bin에 대해 순서가 지정된 인덱스의 첫 번째 항목만 필요하기 때문에 타당합니다.안타깝게도 3.6 테스트에서 인덱스를 실제로 사용할 경우 기대했던 성능에 근접하지 못했습니다.저는 그 문제에 대해 다른 질문에 자세히 올렸습니다.

EDIT 2020-04-23

Atlas의 MongoDB Support를 통해 이 $first 최적화가 Mongo 4.2에 추가되어 3.6으로 작동하는 데 어려움이 있다는 것을 확인했습니다.또한 현재 합성 $group_id로 작동하지 않는 버그가 있습니다.자세한 내용은 위에 링크한 게시물에서 확인할 수 있습니다.

버전 3.2에서 변경됨: MongoDB 3.2부터 인덱스는 집계 파이프라인을 포함할 수 있습니다.MongoDB 2.6 및 3.0에서는 집계 파이프라인이 인덱스를 사용하는 경우에도 집계에는 실제 문서에 대한 액세스가 필요하기 때문에 인덱스가 집계 파이프라인을 포함할 수 없었습니다.

https://docs.mongodb.com/master/core/aggregation-pipeline/ #오토바이-스캐너 앤-스캐너

언급URL : https://stackoverflow.com/questions/20455752/mongodb-aggregation-framework-does-group-use-index

반응형