솜이의 데브로그

10장 ) 성능 향상(2) 본문

CS/Database

10장 ) 성능 향상(2)

somsoming 2021. 12. 21. 16:13

Reference : 데이터베이스 첫걸음

 

실행계획은 어덯게 세워지는가

  • 실행 계획 표시
  • 풀 스캔과 레인지 스캔
  • 인덱스가 있어야 레인지 스캔을 실행할 수 있다.
  • 인덱스는 SQL에서 만든다.

 

인덱스

  • SQL문을 변경하지 않아도 성능을 개선할 수 있다.
  • 테이블의 데이터에 영향을 주지 않는다.
  • 일정한 효과를 기대할 수 있다.

인덱스는 비용 대비 성능이 높은 방법이다.

인덱스의 구조는 B-tree 구조. B-tree는 균형트리이다. 데이터 양이 증가할 수록 우수한 개선효과를 발휘한다.

 

 

  • 실제 데이터베이스는 SQL문을 실행할 때 백그라운드로 정렬을 수행하는 경우가 있지만, 정렬을 끝낸 인덱스를 사용하면서 이를 건너뛰는 경우가 있다.
  • '임시 영역'이란 데이터베이스가 어떤 내부적인 처리를 수행할 때 데이터를 문자 그대로 '일시적으로' 보존하기 위해 사용하는 영역이다.
  • 일반적으로 HDD 등의 저장소가 사용되지만 이런 임시 영역을 사용해 처리하면 매우 늦어서 성능 문제를 일으키는 원인이 될 수 있다.
  • SQL에서 내부적으로 정렬을 발생하게 하려는 처리에는 다음과 같은 것이 있다.
    • GROUP BY
    • 집약 함수(COUNT/SUM/AVG 등)
    • 집합 연산(UNION/ INTERSECT/ EXCEPT)

 

인덱스를 사용할 때 주의할 점

  • 인덱스 갱신의 오버헤드로 갱신 처리의 성능이 떨어진다.
  • 의도한 것과 다른 인덱스가 사용된다.
    • 한개의 테이블에 복수의 인덱스를 작성한 경우에 발생하는 문제.

 

인덱스를 만들 때 기준

  • 크기가 큰 테이블만 만든다
  • 기본키 제약이나 유일성 제약이 부여된 열에는 불필요하다
  • Cardinality가 높은 열에 만든다.
    • Cardinality : 값의 분산도, 특정 열에 대해 많은 종류의 값을 가지고 있다면 Cardinality가 높다.
    • Cardinality가 낮은 열에 인덱스 효과를 기대할 수 없는 것은 인덱스 트리를 따라가는 조작이 증가할수록 오버헤드가 증가해 인덱스를 작성한 혜택을 받지 못하기 때문이다.

 

성능의 안티패턴

  • 결과 정보의 갱신이 OFF로 설정되어 있다.
  • 정기 갱신을 설정하고 데이터 양이 급격히 변화했다.
    • 데이터 양이 일정 비율을 초과해 변화한 경우는 통계정보가 자동으로 수집되는 설정이 가능한 DBMS도 있다.
  • 옵티마이저도 잘못된 통계정보를 바탕으로하면 길을 헤매기 때문에 통계 정보의 정확도에 주의해야 한다.

'CS > Database' 카테고리의 다른 글

35-36강 ) 정규화, 트랜잭션  (0) 2021.12.21
33-34강 ) 관계형 모델, DB 설계  (0) 2021.12.21
10장 ) 성능 향상(1)  (0) 2021.12.21
31-32 강 ) 집합, 테이블 결합  (0) 2021.12.21
9장 ) 백업과 복구  (0) 2021.12.21