programing

BTREE의 장점?

codeshow 2023. 9. 24. 13:13
반응형

BTREE의 장점?

인덱스를 생성할 때는USING BTREEBTREE 지수를 사용하면 이점이 있습니까?

CREATE INDEX `SomeName` USING BTREE ON `tbl_Name`(`column_name`);

우선 사용하는 스토리지 엔진에 따라 선택의 여지가 없을 수 있습니다(예를 들어 InnoDB는 인덱스에 BTREE를 독점적으로 사용하고 있습니다).

또한 BTREE는 대부분의 스토리지 엔진의 기본 인덱스 유형입니다.

자... 대체 인덱스 유형을 사용할 경우 성능이 향상될 수 있습니다.해시 인덱스가 도움이 될 수 있는 경우(비교적 드문 경우)가 있습니다.해시 인덱스가 생성되면 BTREE 인덱스도 생성됩니다.이는 해시 인덱스가 동일한 술어만 해결할 수 있기 때문이기도 합니다.(WHERE Price > 12.0과 같은 조건은 해시 인덱스로 처리할 수 없습니다.)

간단히 말해, 암묵적으로(BTREE가 사용되는 스토리지의 기본값인 경우) 또는 명시적으로 BTREE를 계속 사용합니다.다른 유형의 인덱스에 대해 알아보고 필요성을 파악합니다.

편집: (대체 색인 유형을 사용할 수 있는 검색의 경우)
RTREE 인덱스의 경우는 사실상 간단합니다.MySQL에서는 "SPATIAL" 데이터베이스, 즉 Point와 GIS 모델의 다른 객체와 같은 Geo 위치 컨텍스트를 포함하는 데이터베이스에서만 지원됩니다.

해시 인덱스는 더 일반적이며(특정 응용 프로그램이나 데이터 유형에 제한되지 않음) 해시에 대한 직관적인 이해를 따라 일반적으로 해시가 오래되었지만 충실한 BTREE보다 언제 더 우수할 수 있는지에 대한 힌트를 얻을 수 있습니다. 앞에서 설명한 바와 같이, 이는 일반적으로 동일한 술어로 검색된 열을 의미합니다.MySQL 내의 효과적인 구현에 따라 상대적으로 짧은 룩업 테이블 등이 도움이 될 수 있다고 생각합니다.

BTREE는 기본 인덱스 메서드입니다.당신은 안전하게 생략할 수 있습니다.

사용하는 스토리지 엔진에 따라 달라집니다.대부분의 경우 BTREE가 기본값이므로 지정해도 변경되지 않습니다.MEMORY/HEAP 및 NDB와 같은 스토리지 엔진의 경우 기본적으로 해시 인덱스를 사용합니다.

자세한 내용은 여기에서 확인할 수 있습니다.

성능 측면에서 B-트리 또는 해시 인덱스가 귀사에 유리한지 여부는 데이터와 액세스 방법에 따라 달라집니다.쿼리가 정확히 하나의 행 또는 흩어져 있는 개별 행을 대상으로 한다는 것을 알고 있다면 해시 인덱스가 유용할 수 있습니다.그 외에는 데이터가 정렬되어 범위 쿼리와 다중 행을 반환하는 쿼리가 더 효율적이기 때문에 일반적으로 BTREE 인덱스를 선호합니다.

균형 잡힌 나무를 찾는다는 것은 모든 잎들이 같은 깊이에 있다는 것을 의미합니다.활주로 포인터 오버헤드가 없습니다.실제로, 더 큰 B-트리는 주어진 키를 찾기 위해 적은 수의 노드를 검색해야 한다는 것을 보장할 수 있습니다.예를 들어, 노드당 50개의 키를 가진 10,000,000개의 키로 구성된 B-트리는 키를 찾기 위해 4개 이상의 노드를 검색할 필요가 없습니다.B-트리는 인덱스의 데이터에 신속하게 액세스할 수 있도록 해주는 인덱스의 특수한 데이터 구조 형식입니다.이 데이터 구조의 속성 중 하나는 인덱스가 항상 균형이라는 것입니다.즉, 가장 낮은 레벨의 각 노드는 최상위 노드 또는 트리의 루트 노드와 동일한 거리에 있습니다.그리고 인덱스의 각 면에는 동일한 수의 노드가 있습니다.가장 낮은 레벨의 노드를 리프 노드(leaf node)라고 합니다.다른 모든 노드는 분기 노드로 알려져 있습니다.분기는 다른 분기 또는 리프 노드를 가리킵니다.리프 노드는 인덱싱된 열과 해당 값이 있는 고유 행을 가리키는 행 ID의 값을 저장합니다.실제 분포는 B-트리의 각 값 범위에 있는 데이터 값의 수에 따라 달라지며, 전체적인 목표는 특정 값으로 도달하기 위해 통과해야 하는 필수 레벨의 수를 줄이는 것입니다.B-트리 구조의 장점은 다음과 같습니다.

  1. 모든 리프 블록은 동일한 깊이(값 수)입니다.
  2. B-tree의 높이는 일반적으로 상당히 작습니다.루트 노드가 유일한 리프 노드이고 높이가 1인 경우도 있습니다.테이블에 행이 더 많이 삽입되면 이를 수용하기 위해 인덱스가 커져야 합니다.그러나 100만 행 이상의 테이블에서도 B-트리 idex는 일반적으로 높이 3을 갖습니다.가장 큰 테이블에서는 높이가 4에 불과할 수 있습니다.이는 가장 큰 테이블의 경우에도 원하는 행의 행을 찾는 데 4개의 블록만 사용하면 된다는 것을 의미합니다.이것은 매우 효율적입니다.
  3. 임의로 입력된 데이터의 경우 B-트리는 자동으로 균형을 유지합니다.실제로 B-트리는 어떤 데이터를 입력하든 균형을 유지합니다.
  4. B-tree 인덱스의 모든 블록은 3/4(평균) 가득 차 있으므로 재조립 없이 삽입할 수 있습니다. 5.B-tree는 모든 유형의 선택에 탁월한 성능을 제공합니다. 6.삽입, 업데이트 및 삭제는 B-tree 구조에서 효율적인 경향이 있습니다. 7.B-트리 성능은 작은 테이블에서 큰 테이블까지 최적의 상태를 유지합니다.

간단한 대답은 SQL에서 해당 필드에 LIKE 문을 사용하는 경우 BTREE 인덱스를 사용하면 해시 인덱스보다 성능이 우수하다는 것입니다.해당 필드에 대해 (=)와 동일한 문을 사용하는 경우 해시 인덱스를 사용합니다.

언급URL : https://stackoverflow.com/questions/1687910/advantage-of-btree

반응형