복붙노트

[MONGODB] 왜 MongoDB의에서 인덱스 문제의 방향을합니까?

MONGODB

왜 MongoDB의에서 인덱스 문제의 방향을합니까?

워드 프로세서를 인용 :

그러나, 나는 인덱스의 방향이 복합 인덱스에 문제가해야 이유가 없습니다. 누군가가 자세한 설명 (또는 예)을 제공시겠습니까?

해결법

  1. ==============================

    1.MongoDB를 어떤 방법으로 복합 키를 연결해 BTREE의 핵심으로 사용한다.

    MongoDB를 어떤 방법으로 복합 키를 연결해 BTREE의 핵심으로 사용한다.

    단일 항목을 찾는 경우 - 트리의 노드의 순서는 무관하다.

    당신이 노드의 범위를 반환하는 경우 - 요소는 트리의 같은 지점 아래로 될 것입니다 서로 닫습니다. 가까이 노드는 빨리 그들이 검색 할 수있는 범위에 있습니다.

    단일 필드 인덱스 - 순서는 중요하지 않습니다. 그들은 오름차순으로 서로 가까이 있다면 그들은 또한 내림차순으로 가까이 함께 할 것입니다.

    당신이 복합 키가있는 경우 - 주문 시작이 중요합니다.

    예를 들어, 키는 다음과 같이 보일 수있는 인덱스를 올라가는 상승 B는 다음과 같습니다

    Row   A B
    1     1 1
    2     2 6
    3     2 7 
    4     3 4
    5     3 5
    6     3 6
    7     5 1
    

    오름차순으로 B 형 하강에 대한 쿼리는 행을 반환하고 속도가 느려집니다 순서의 인덱스를 주변에 이동해야합니다. 예를 들어, 그것은 행 1, 3, 2, 6, 5, 4, 7 반환

    A는 단순히 올바른 순서로 순차적으로 행을 반환합니다 인덱스와 같은 순서로 쿼리였다.

    BTREE의 레코드를 찾는 것은 O (로그 (N)) 시간이 걸립니다. 단 OLog (N)의 순서로 레코드의 범위를 구하는 것은 K + 레코드의 수를 반환한다 (K).

    레코드 순서가 있으면, 비용 OLog (N)과 같은 높이로 될 수 * K

  2. ==============================

    2.당신이 찾고있는 것을 간단한 대답은 두 개 이상의 필드를 정렬 할 때 방향은 중요한 것입니다.

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

    {: 1, B : -1} 당신은에 정렬하는 경우 :

    인덱스 {A : 1, B : 1} 인덱스보다 느린 것 {1, B : -1}

  3. ==============================

    3.두 가지 중요한 점을 이해합니다.

    두 가지 중요한 점을 이해합니다.

    인덱스는 무료로하지 않습니다. 삽입, 업데이트 및 삭제를 할 때 그들은 메모리를 가지고 가고, 성능 저하를 부과. 일반적으로 성능 저하 (특히 읽기 성능 향상에 비해) 무시할 수 있지만, 우리가 우리의 인덱스를 만드는 방법에 대한 스마트 될 수 없다는 것을 의미하지 않는다.

    필드의 그룹이 함께 인덱싱해야하는지 확인하는 것은 실행중인 쿼리를 이해에 관한 것입니다. 색인을 만드는 데 사용되는 필드의 순서는 중요합니다. 좋은 소식은 당신이 주문 잘못을받을 경우 설명과 함께 자리하기 쉬운 것 때문에, 인덱스가 전혀 사용되지 않습니다, 그입니다.

    귀하의 쿼리 정렬을해야 할 수도 있습니다. 당신이 당신이 조회되는 필드 식으로 정렬되는 필드를 치료하는 것이 중요하므로 그러나 정렬하는 것은 비용이 많이 드는 작업이 될 수 있습니다. 이 인덱스가 경우에 따라서 더 빨리 될 것입니다. 한 가지 중요한 차이하지만, 당신이 당신의 인덱스의 마지막 필드해야 정렬되는 분야가있다. 필드 후 꼭 될-마지막 규칙이 적용되지 않습니다, 또한 쿼리의 일부인 경우이 규칙의 유일한 예외입니다.

    당신은 인덱스 또는 일부의 모든 키에 대한 정렬을 지정할 수 있습니다; 그들은 인덱스에 나타나는 그러나, 정렬 키는 같은 순서로 나열되어야합니다. 예를 들어, 인덱스 키 패턴 {A : 1, B : 1}에 있지만 {1 : 1, B, A} {B : 1, A : 1} A의 정렬을 지원한다.

    정렬 인덱스 키 패턴으로 모든 키에 대해 동일한 방향으로 정렬 (즉, 상승 / 하강)를 지정하거나, 인덱스 키 패턴으로 모든 키에 대해 역방향 정렬 방향을 지정한다. 예를 들어, 인덱스 키 패턴 {A : 1, B : 1} 있지만에 {A {1, B : 1}과 {-1 : -1, B}에 대한 정렬을 지원 -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 }
    
  4. from https://stackoverflow.com/questions/10329104/why-does-direction-of-index-matter-in-mongodb by cc-by-sa and MIT license