database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10465 게시물 읽기
No. 10465
왜 상용 DBMS는 인덱스용 자료구조로 B+Tree 대신 B-Tree를 사용할까요?
작성자
이진호(dfghcvb11)
작성일
2024-03-29 13:28
조회수
133

용량의 이유일까요?

아무리 찾아봐도 명쾌한 답을 찾기 힘들어 질문 남깁니다.

왜 postgresql이나 mysql과 같은 상용 DBMS는 인덱스용 자료구조로 B+Tree 대신 B-Tree를 사용할까요?

결국 B+Tree의 형태가 속도의 측면에서는 더욱 빠를 것으로 생각됩니다. 물론 용량의 측면에서는 B-Tree가 나을 것으로 생각됩니다.

그래서 더 잡아먹는 용량에 비해 속도 개선이 그리 많지 않은 것이 이유일 것 같은데,

이건 저의 추측일 뿐이고, 선배님들의 생각을 들어보고 싶어 글을 남깁니다.

아니면, 제가 찾지 못 하는 이고 오피셜한 자료가 있을까요?

이 글에 대한 댓글이 총 3건 있습니다.

https://jomuljomul.tistory.com/m/entry/PostgreSQL-%EA%B3%B5%EB%B6%80%ED%95%98%EA%B8%B0-PostgreSQL-Index%EB%8A%94-B-Tree%EB%A5%BC-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C


btree 와 b+tree 구분을 각 노드에 키 중북이 있는가로 구분한다면 b+tree 입니다.


크게 보면 의미 없어요.

그냥 범위 검색을 할 때는 btree 인덱스를 쓴다.

뭐 단일 키 검색 (= 연산 검색)에서도 hash랑 엄청난

차이가 있으니 반드시 hash 인덱스를 쓰는게 좋다는 것도 아니니

그냥 인덱스는 btree 기본 형태를 쓴다. 

정도로만 알고 있으면 됩니다.


더 중요한 것은 어떤 퀴리의 작업 비용을 최적화 하기위해

어떤 자료형을 쓸 것이고,

어뗜 칼럼 기준으로 인덱스를 만들어 둘 것인가,

이 계획이 자료가 많아지는 상황에서도 유효한가를 

고민하는 것입니다.

김상기(ioseph)님이 2024-03-29 13:42에 작성한 댓글입니다.
이 댓글은 2024-03-29 13:53에 마지막으로 수정되었습니다.

저도 더 중요한 것은 어떤 상황에서 어떤 자료구조와 인덱스를 사용하는 것을 고민하는 것이라고 생각하고, 그 부분을 좀 더 중점적으로 공부하고 있습니다.


다만, 거대한 프로덕트에서 여러 선택지 중 하나를 사용할 때는 깊은 고찰과 연구가 있을 것이라고 생각했고, 그 이유가 궁금해서 질문 남겼습니다.

이진호(dfghcvb11)님이 2024-03-30 13:25에 작성한 댓글입니다.
이 댓글은 2024-03-30 13:31에 마지막으로 수정되었습니다.

질문의 요지가 PostgreSQL은 b+tree 인덱스를 왜 사용했는가?

이거인거죠?


이걸 이해하려면, b+tree 인덱스의 등장 배경을 이해해야합니다.


인터넷에서 이렇게 소개하네요.

https://velog.io/@bambookim/B-Tree-BTree

--------

B+Tree

 

B-Tree는 어떤 한 데이터의 검색에서는 빠를 수 있으나, 모든 데이터를 순회하기 위해서는 leaf node까지 갔다가 다시 부모 node로 BackTracking하여 트리의 모든 node를 방문해야 하므로 비효율적이다. 이러한 단점을 보완한 것이 B+Tree이다.

--------


즉, between 연산 최적화를 위해서는 btree 로는 부족했던거죠.

속도를 얻고, 인덱스 key 중복 저장을 허용하는 것을 취한거죠.


이거 말고 다른 이유가 있을까싶네요.

자료처리에서 현재 기술 이론상으로는 between 연산에서 b+tree 만한 놈이 아직 없어,

다들 이거 씁니다.

그래서, RDBMS에서 btree 이러면, b+tree를 암묵적으로 지시하는게 일반적입니다.


요즘 데이터베이스 가운데, 전통 btree 인덱스를 쓰는 데이터베이스를 저는 모릅니다. 제가 알고 있는 데이터베이스는 모두 b+tree 입니다.

 

김상기(ioseph)님이 2024-04-02 17:42에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10471오라클에서 postgresql로 dblink 걸 수 있는 방법 문의드립니다. [1]
초보dba
2024-04-24
61
10467postgres 프로세스 일시중단
용암그라탕
2024-04-08
115
10466pgpool 정족수 [3]
찌르버드
2024-04-01
155
10465왜 상용 DBMS는 인덱스용 자료구조로 B+Tree 대신 B-Tree를 사용할까요? [3]
이진호
2024-03-29
133
10464Oracle 처럼 Dependency 상태 체크 방법 있을까요? [4]
신은정
2024-03-19
211
10463삭제 구문시간 확인 방법 문의 [3]
뽀글러
2024-03-14
173
10462Tibero to PostgreSQL [1]
임한수
2024-02-26
226
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다