반응형
성능 이슈발생 원인
- 대부분 성능 이슈는 index 선언과 잘못된 query문으로 인해 slow 이슈가 발생하게됩니다.
- 부수적으로 replication과 리눅스 connection개수와 같은 여러 방식으로 성능 이슈를 해결하는 경우도있지만 애플리케이션에서 index와 slow 쿼리를 빠르게 찾는게 중요합니다.
간단한 용어 정리
- 카디널리티: 겹치지 않는 row의 수
- 선택도
- 카디널리티를 전체 조회된 데이터 개수로 나눈것 : 카디널리티/전체row수
- 1에 근접할 수록 좋습니다.
- 분포도: 특정 컬럼에 대해서 전체 건수 대비 특정 값이 차지하는 비율(만약 Y/N이고 100개중 50/50비율이면 50%입니다)
Index
정의
- Database의 데이터를 빠르게 찾기 위해서 사용하는 테이터 구조
- MySQL innoDB에서는 default로 B-Tree형태를 가짐
특징
- 조회 시간 단축
- 주로 B-Tree구조(Balanced-Tree)를 사용해서 binary search 형태로 진행
- leaf node끼리는 double linked list형태로 이뤄져있습니다.
- fullscan이 이뤄질때는 linkedlist를 타서 성능을 올리려고 노력합니다.
- 만약 조회 데이터가 전체 데이터의 50%가 넘을 경우 full scan으로 자동으로 처리한다
Index 종류
- 클러스티드 Index
- Non 클러스티드 index
Clusted Index
정의
- 메모리에 순차적으로 저장되는 인덱스
- 물리적인 DB에서 비슷한 데이터끼리는 모여 있는 것을 의미
- 물리적으로 이미 Index에 맞춰서 정렬되어있음
- leaf node에는 실제 row 데이터를 저장하여 pk혹은 unique key가 clustered key 역할을 수행
- 테이블 당 1개를 가지게된다.
- 선택도가 30%이내에서 사용하는 것을 추천합니다.
- InnoDB에서는 default로 clusted Index로 설정이 이뤄짐
- oracle인 경우 insert를 최대한 빠르게 하기 위해서 사용하는 DB입니다. 그러므로 clustered index는 선택 사항입니다.
- oracle은 clustered index가 있더라도 물리적으로 위치를 순차적으로 저장하진 않습니다.
최대 생성 개수
- 최대 1를 설정하는게 유리합니다
- 만약 2개의 클러스터 인덱스가 있다면 정렬의 규칙을 설정하기 매우 까다로워 집니다.
Non Clusted Index
정의
- Table에서 Column에 대한 Index를 추가하는 것을 의미
CREATE INDEX
를 통해서 만단 Index는 Non clusted Index이다- leaf node에 row id값이나 pk 값을 가집니다.
- 그러므로 non clusted index를 통해 조회가 이뤄지면 pk값을 획득하고 clustered index에 다시 조회해 데이터를 가져옵니다.
최대 생성 개수
- 여러개 생성 가능
- 하지만 인덱스 저장과 삭제로인해서 DB삭제 추가에 오버 헤드가 발생 하기 때문에 필요한 요구사항에 적절하게 선언하는게 중요합니다.
복합 Index
정의
- 2가징 이상의 column을 index로 설정하는 것을 의미
중요한 부분
- 복합 index는 like, 비교연산(<, <=, >=, >) 와같은 조건이 있으면 해당 컬럼 뒤에 선언된 index는 index를 사욯하지 못하니다.
- 예시
SELECT *
FROM team t INNER JOIN member m
ON t.팀코드 = m.팀코드
WHERE m.맴버번호 > "C" AND m.이름 = "DDD";
라는 query가 들어왔다가 가정 합니다.
맴버번호
,이름
순으로 index가 선어되어있을 경우- 처음에
맴버 번호
로 먼저 index를 사용해 조회를 합니다. - 노란색으로 조회 된데이터를 memory에 올립니다
- 이름을 모든 row를 loop돌면선
DDD
인 것을 찾습니다.
- 처음에
이름
,맴버번호
순으로 index가 선언되어있을 경우- 처음에
DDD
로 이름을 먼저 조회 합니다. 그리고 그 다음 index를 통해서 정렬 되어있기 때문에 바로 random access로 데이터 row에 접근할 수 있습니다.
- 처음에
반응형
'CS > Database' 카테고리의 다른 글
Replica 싱크 불일치 이슈 (0) | 2022.04.07 |
---|---|
RDB Semi Join을 이용한 성능 최적화 (0) | 2021.12.12 |
RDB Join 방식 (0) | 2021.12.09 |
NamingLock을 이용한 동시성 이슈, Deadlock query 이슈 해결 (0) | 2021.12.01 |
DB Isolation (0) | 2021.10.30 |