bestsource

몽고DB에서 지수 방향이 중요한 이유는 무엇인가?

bestsource 2023. 3. 10. 22:37
반응형

몽고DB에서 지수 방향이 중요한 이유는 무엇인가?

문서를 인용하려면:

인덱스를 작성할 때는 키와 관련된 숫자가 인덱스의 방향을 지정하므로 항상 1(상승) 또는 -1(내림)이어야 합니다.방향은 단일 키 색인이나 임의 액세스 검색에는 중요하지 않지만 복합 색인에 대해 정렬 또는 범위 쿼리를 수행하는 경우 중요합니다.

그러나 복합지수에 지수의 방향성이 중요할 이유는 없다고 본다.누군가 더 자세한 설명(또는 예)을 해주실 수 있나요?

MongoDB는 어떤 방식으로든 복합 키를 연결하여 BTree의 키로 사용합니다.

단일 항목을 찾을 때 - 트리의 노드 순서는 관련이 없습니다.

노드 범위를 반환하는 경우 - 서로 가까운 요소가 트리의 동일한 분기 아래에 있습니다.노드가 범위에 가까울수록 더 빨리 검색할 수 있습니다.

단일 필드 색인 사용 - 순서는 중요하지 않습니다.오름차순으로 서로 가까울 경우 내림차순으로 서로 가까울 것입니다.

복합 키가 있는 경우 - 순서가 중요해집니다.

예를 들어 키가 A 오름차순 B인 경우 인덱스는 다음과 같습니다.

A행 B1     1 12     2 63     2 74     3 45     3 56     3 67     5 1

A 오름차순 B 내림차순 쿼리는 행을 반환하기 위해 인덱스를 건너뛰어야 하며 속도가 느려집니다.를 들어 행이 됩니다.1, 3, 2, 6, 5, 4, 7

인덱스와 같은 순서로 범위 쿼리를 실행하면 올바른 순서로 행이 반환됩니다.

BTree에서 레코드를 검색하려면 O(Log(n) 시간이 걸립니다.레코드 범위를 순서대로 찾는 것은 OLog(n) + k뿐입니다.여기서 k는 반환할 레코드 수입니다.

레코드가 잘못된 경우 비용이 OLog(n)*k만큼 높아질 수 있습니다.

찾고 있는 간단한 답변은 두 개 이상의 필드를 정렬할 때만 방향이 중요하다는 것입니다.

{a : 1, b : -1}:

★★{a : 1, b : 1}인덱스보다 느립니다.{a : 1, b : -1}

인덱스를 사용하는 이유

두 가지 핵심 사항을 이해하십시오.

  1. 지수가 없는 것보다는 낫지만, 정확한 지수는 어느 쪽보다 훨씬 낫다.
  2. MongoDB는 쿼리당 하나의 인덱스만 사용하여 적절한 필드의 복합 인덱스를 만듭니다.

인덱스는 무료가 아닙니다.메모리를 사용하여 삽입, 업데이트 및 삭제를 수행할 때 성능 저하가 발생합니다.일반적으로 성능 저하(특히 읽기 성능 향상에 비해)는 무시할 수 있지만, 그렇다고 해서 인덱스를 현명하게 작성할 수 없는 것은 아닙니다.

인덱스 방법

함께 인덱싱해야 하는 필드 그룹을 식별하는 것은 실행 중인 쿼리를 이해하는 것입니다.인덱스를 만드는 데 사용되는 필드의 순서가 중요합니다.좋은 소식은 순서를 틀리면 인덱스가 전혀 사용되지 않기 때문에 설명하면 쉽게 찾을 수 있다는 것입니다.

정렬 이유

쿼리에 정렬이 필요할 수 있습니다.그러나 정렬은 비용이 많이 들기 때문에 정렬하는 필드를 쿼리하는 필드와 동일하게 취급하는 것이 중요합니다.그래서 인덱스가 있으면 더 빠를 거예요.그러나 한 가지 중요한 차이가 있습니다. 정렬할 필드는 인덱스의 마지막 필드여야 합니다.이 규칙의 유일한 예외는 필드가 쿼리의 일부이기도 한 경우 must-be-last-rule이 적용되지 않는다는 것입니다.

정렬 방법

인덱스의 모든 키 또는 하위 집합에서 정렬을 지정할 수 있지만 정렬 키는 인덱스에 표시되는 것과 동일한 순서로 나열되어야 합니다.예를 들어 인덱스 키 패턴 { a: 1, b: 1 }은(는) { a: 1, b: 1 }에서 정렬을 지원할 수 있지만 { b: 1, a: 1 }에서는 지원할 수 없습니다.

정렬은 모든 키에 대해 인덱스 키 패턴과 동일한 정렬 방향(즉, 오름차순/내림차순)을 지정하거나 모든 키에 대한 역 정렬 방향을 인덱스 키 패턴으로 지정해야 합니다.예를 들어 인덱스 키 패턴 { a: 1, b: 1 }은(는) { a: 1, b: 1 } 및 { a: -1, b: -1 }에서 정렬을 지원할 수 있지만 { a: -1, b: 1 }에서는 지원할 수 없습니다.

다음과 같은 인덱스가 있다고 가정합니다.

{ a: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 1, c: 1 }

Example                                                    Index Used
db.data.find().sort( { a: 1 } )                            { a: 1 }
db.data.find().sort( { a: -1 } )                           { a: 1 }
db.data.find().sort( { a: 1, b: 1 } )                      { a: 1, b: 1 }
db.data.find().sort( { a: -1, b: -1 } )                    { a: 1, b: 1 }
db.data.find().sort( { a: 1, b: 1, c: 1 } )                { a: 1, b: 1, c: 1 }
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } )   { a: 1, b: 1 }

언급URL : https://stackoverflow.com/questions/10329104/why-does-direction-of-index-matter-in-mongodb

반응형