2014-06-22 2 views
0

mongodb에서 AND 쿼리를 실행할 때 절 순서에 성능 효과가 있습니까? 테스트 결과 '아니오'라고 표시되는데 반대로 주장하는 기사를 보았 기 때문에 무언가를 놓치고 있는지 궁금합니다.mongodb AND 절 순서

예. 다른 순서로 이제

{_id:1, type:'personal', author:'Mr A', ...} 
{_id:2, type:'commercial', author:'Mr A', ...} 
{_id:3, type:'personal', author:'Mr B', ...} 
{_id:4, type:'commercial', author:'Mr B', ...} 
{_id:5, type:'personal', author:'Mr C', ...} 
{_id:6, type:'commercial', author:'Mr C', ...} 
{_id:7, type:'personal' , author:'Mr D', ...} 
{_id:8, type:'commercial', author:'Mr D', ...} 

With indexes: 
    col.ensureIndex({type:1}) 
    col.ensureIndex({author:1}) 

내가 실행할 수있는 쿼리 : 일부 '블로그'문서 고려

col.find({type:'commercial', author:'Mr A'}) 
col.find({author:'Mr A' , type:'commercial' }) 

나는 '설명'실행 시도를하고 관계없이 '저자'인덱스를 취할 것입니다 인상을 받았습니다 ("Mr A"는 블로그가 2 개 뿐이며 "commercial"은 4 개의 블로그에 표시되기 때문에). 절 순서에 관계없이 "가장 좁은"색인을 선택하는 것은 문서화 된 기능입니까? 대단히 감사합니다.

답변

1

둘 이상의 필드를 쿼리하는 경우 복합 인덱스 사용을 고려하십시오.

db.col.ensureIndex({ "type": 1, "author": 1 })

조회에게 문서 : http://docs.mongodb.org/manual/core/index-compound/

화합물 인덱스 필드의 순서는 중요하다. 앞의 예제에서 앞의 예에서 인덱스는 먼저 항목 필드의 값으로 정렬 된 문서에 대한 참조를 포함하며 각 값 의 항목 필드는 주식 필드의 값으로 정렬됩니다. 자세한 내용은 정렬 순서 을 참조하십시오.

+0

당연히 당신 말이 맞습니다. 의도적으로 분리 된 인덱스의 경우를 자연스럽게 언급했습니다 (다른 쿼리도 제공함). 명확히하지 않고 미안하다. 그리고 어떻게해서든지 감사한다 :) –

0

그래서 관계없이 절 순서 "가장 축소"인덱스, 을 선택하는 문서화 된 기능입니다?

예, MongoDB는 항상 최상의 결과를주는 색인을 사용하려고합니다. 쿼리를 수행 할 때 MongoDB의 쿼리 최적화 프로그램을 사용

MongoDB의 쿼리 최적화 프로그램이 쿼리를 처리하고 사용 가능한 인덱스 주어진 쿼리에 가장 효율적인 쿼리 계획을 선택합니다. 쿼리 시스템은 쿼리가 실행될 때마다이 쿼리 계획을 사용합니다.

query plan없이 쿼리를 실행하면 MongoDB가 새 쿼리를 생성합니다. 쿼리 계획을 생성하기 위해 MongoDB는 여러 후보 인덱스에 대해 여러 쿼리를 병렬로 실행합니다. 선택한 색인은 동일한 쿼리 패턴을 가진 모든 후속 쿼리에서 사용됩니다.

query plans에 대한 자세한 내용은 MongoDB 문서를 참조하십시오.

또한 참조 용으로 쿼리에 사용할 인덱스를 알고있는 경우 hint 커서 방법으로 지정할 수 있습니다.

col.find({type:'commercial', author:'Mr A'}).hint({ author : 1}); 

실행 및 MongoDB를 쿼리 할 때 조항의 순서에 대한 성능 효과가있다?

MongoDB가 항상 최상의 인덱스를 선택하기 때문에 두 필드 모두에서 두 개의 별도 인덱스가 중요하지 않습니다.