반응형
그니_
삽질탐방기
그니_
  • 분류 전체보기 (24)
    • 개발 (15)
    • ETC (1)
    • 트러블슈팅 & 삽질기록 (7)
    • 성능개선 (1)

인기 글

최근 글

최근 댓글

태그

  • 마이크로소프트 ai tour
  • chatgpt 정리
  • spring docker
  • db
  • Spring
  • chatgpt 히스토리 삭제
  • Database
  • chatgpt 확장 추천
  • springboot
  • chatgpt 확장 프로그램
  • timeunit
  • chatgpt 기록 삭제
  • chatgpt 채팅 삭제
  • spring docker compose
  • easyrandom
  • java
  • spring log
  • GPT 플러그인
  • index
  • 네트워크
hELLO · Designed By 정상우.
그니_

삽질탐방기

개발

DB Index란?

2022. 6. 29. 04:31
반응형

기존에도 인덱스가 조회 성능 개선에 도움이 된다는 것은 이론적으로 알고 있었다.
하지만 이번 사내 기능 개선 작업을 통해 직접 인덱스를 설계하고 적용하여, 실질적으로 성능을 개선한 것은 처음이었다.

특정 조건에 따라 데이터를 조회하는 쿼리 속도가 예상보다 느렸고, 원인 분석 중 인덱스 최적화 필요성을 확인했다.
적용 후, 쿼리 응답 속도가 확연히 개선되는 것을 직접 경험할 수 있었다.

출처 http://bir.co.kr/bookreview/132722/

본론으로 들어가 어떠한 구조인지 한번 봐보자!

B-Tree(Balanced Tree 균형 트리)

자료구조에서 범용적으로 사용되는 데이터 구조, 인덱스만을 위한 표현은 아니고 여러곳에서 쓰인다. 말 그대로 균형 잡힌 트리를 의미

이미지에서 언급되는 노드란 트리구조에서 존재하는 공간을 의미함.

노드에 해당하는 것이 페이지인데 페이지는 16kbyte(mysql 기준)크기인데 한개만 저장해도 16kbyte를 차지(RDBMS에 따라 차이)

아래와 같이 루트노드에서 출발해 연결된 n개의 리프노드로 쭉쭉 연결되는데 이러한 구조로 인해 select시 성능 향상을 가져오는 이유!

대신 이러한 구조의 단점은 insert,update,delete시에 성능이 나빠지는 단점이 존재.

이유는 '페이지 분할'이라는 행위가 일어남...리프노드(페이지)에 공간이 없다? 그러면 다음 리프를 순회하며 공간을 찾는데, 만약 그래도 없다? 그럼 이제 페이지 분할 작업이 일어남(기존 페이지를 새롭게 구성)... select와 다르게 페이지 확보라는 행위로 인해 기존 페이지를 새롭게 정의? 단어가 알맞은진 모르겠지만 새롭게 루트 노드부터 리프노드를 구성함 이러한 행위가 지속 된다면 그만큼 처리 속도는 느려진다.

 

참고사이트

  • https://datageek.blog/en/2018/06/05/rdbms-basics-indexes-and-clustered-indexes/
반응형

'개발' 카테고리의 다른 글

SSH into docker container  (0) 2022.07.11
VLAN  (0) 2022.07.07
WebRTC  (0) 2022.07.06
참고 사이트 정리  (0) 2022.07.06
[Jackson] 추상클래스, 인터페이스를 파라미터로?  (0) 2022.06.27
    '개발' 카테고리의 다른 글
    • VLAN
    • WebRTC
    • 참고 사이트 정리
    • [Jackson] 추상클래스, 인터페이스를 파라미터로?
    그니_
    그니_
    머리속에서만 존재하는 내용을 글로 정리

    티스토리툴바