source

MongoDB : 인덱스 순서와 쿼리 순서가 일치해야 합니까?

nicesource 2023. 6. 28. 21:48
반응형

MongoDB : 인덱스 순서와 쿼리 순서가 일치해야 합니까?

이 질문은 인덱스를 관리하고 Bson 문서를 검색하는 내부 방법에 관한 것입니다.

"index1", "index2", "index3"와 같은 여러 인덱스를 만드는 경우...인덱스는 쿼리 중에 사용하기 위해 저장되지만 쿼리 순서와 성능은 어떻습니까?

견본의
index1, index2, index3----> 동일한 순서의 쿼리1, index2, index3(최적의 경우) index1, index2, index3--> 다른 순서의 쿼리2, index1, index3(변경된 순서)

이러한 3개의 인덱스와 기타 항목 또는 그 이상의 인덱스를 포함하여 중첩된 쿼리를 사용하는 경우가 많습니다.질의 순서는 시간을 낭비하는 것을 의미합니다.정의된 인덱스 순서와 관련된 쿼리를 전달하거나 내부 아키텍처에서 이 순서 검색을 고려해야 합니까?저는 제가 이것에 대해 신경을 쓰는지 아니면 자유에 대한 질문을 더 세련되게 할 수 있는지 알고 싶습니다.

감사해요.

쿼리의 조건 순서는 인덱스를 사용할 수 있는지 여부에 영향을 주지 않습니다.

예: 일반적인 문서 구조:

{
    "FieldA" : "A",
    "FieldB" : "B"
}

A와 B에 복합 지수가 있는 경우:

db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})

그러면 다음 쿼리 모두 해당 인덱스를 사용할 수 있습니다.

db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})

따라서 쿼리에 있는 조건의 순서는 인덱스가 사용되는 것을 막지 않습니다. 제 생각에 이것이 당신이 묻고 있는 질문인 것 같습니다.

셸에서 2개의 쿼리를 시도하고 다음을 추가하면 쉽게 테스트할 수 있습니다..explain()발견 후에제가 확인하기 위해 한 것인데, 둘 다 복합 지수가 사용되었다는 것을 보여주었습니다.

그러나 다음 쿼리를 실행하면 필드 A가 쿼리되지 않으므로 인덱스가 사용되지 않습니다.

db.MyCollection.find({FieldB : "B"})

즉, 쿼리에서 사용할 수 있는지 여부를 정의하는 것은 인덱스의 필드 순서이며 쿼리 자체의 필드 순서는 아닙니다(Lucas가 언급한 내용입니다).

http://www.mongodb.org/display/DOCS/Indexes 에서:

여러 필드에 복합 인덱스가 있는 경우, 이 인덱스를 사용하여 필드의 시작 부분 집합에 대해 쿼리할 수 있습니다.그래서 만약 당신이 색인을 가지고 있다면.

a,b,c

쿼리를 사용할 수 있습니다.

a

AB

a,b,c

네, 주문이 중요합니다.좀 더 정확한 답변이 필요하다면 질문을 좀 더 명확히 해야 합니다.

언급URL : https://stackoverflow.com/questions/5245737/mongodb-indexes-order-and-query-order-must-match

반응형