Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- React Native
- 네트워크
- 깃허브 로그인
- 리액트 네이티브
- 백준 4358번
- 팀플회고
- 지네릭스
- 백준 4949번
- 모두의 네트워크
- 모두의네트워크
- 깃 연동
- 딥러닝
- 깃 터미널 연동
- 머신러닝
- 깃허브 토큰 인증
- 데이터베이스
- 정리
- HTTP
- 모두를위한딥러닝
- 데베
- 문자열
- 리액트 네이티브 시작하기
- 스터디
- 백준 4358 자바
- 백준 5525번
- SQL
- 리액트 네이티브 프로젝트 생성
- 모두를 위한 딥러닝
- 백준
- 자바
Archives
- Today
- Total
솜이의 데브로그
10장 ) 성능 향상(2) 본문
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 |