인덱스 설정 기준
카디널리티가 높을수록 좋다.
- index 후보군 컬럼 A, B, C 가 있다고 가정하고 아래와 같이 쿼리해서 커디널리티가 높은 컬럼 확인
SELECT
COUNT(DISTINCT(A)) A_cad,
COUNT(DISTINCT(B)) B_cad,
COUNT(DISTINCT(C)) C_cad
FROM tbl;
- A, B, C 세개를 복합인덱스로 설정할 경우 카디널리티가 높은 순서대로 지정하는 것이 좋다.
선택도가 낮을 수록 좋다. (5~10%)
- 선택도란 필드의 값들이 어떻게 다른지를 설명하는 것이다.
- 선택도 계산은 COUNT(DISTINCT) 한 숫자를 전체 레코드의 숫자로 나눈다.
- user_id 가 unique 할 경우 전체 row 수와 user_id count 가 같을 것이다. 이럴 경우 선택도는 1이 된다.
- user_ip 컬럼을 계산해 보면 (공용 ip 접근이 많다고 가정) 30(IP) / 1000(전체) = 0.03
활용도가 높을수록 좋다.
- join 을 하고 있다면 join 컬럼으로 활용하고 있는가?
- application 에서 사용하는 쿼리에서 where 조건에서 사용되는가?
varchar 의 경우 부분인덱스활용
- varchar(255) 의 경우 실제 255 자리를 모두 사용하는 경우는 드물다.
- 앞부분만 부분 인덱스 처리하는 것도 방법이다. ex) INDEX `doc_index_elucidator_id` (elucidator_id(15))
주의사항
- 인덱스는 테이블당 최대 5개를 넘기지 않도록 한다.
- 인덱스를 추가할 수록 insert/update 성능은 떨어진다.
- 조회 성능을 빠르게 하기 위해 위에서 이야기한 참고사항들을 체크해 보지 않고
무조건 인덱스를 추가하지 않도록 한다.
'IT > DBMS 공통' 카테고리의 다른 글
Procedure Cursor 를 이용한 ResultSet 반환 (0) | 2020.10.15 |
---|---|
MySQL 속도 개선 TIP (4) | 2020.09.24 |
[MySQL] 실행계획 (0) | 2020.01.31 |
database convert latin1 to utf-8 (0) | 2014.09.15 |
Oracle DBLink 와 비슷한 MySQL FEDERATED ENGINE (0) | 2014.04.07 |