본문 바로가기
IT/DBMS 공통

MySQL 인덱스 설정 기준

by 최고영회 2020. 8. 7.
728x90
반응형
SMALL

 

인덱스 설정 기준

 

카디널리티가 높을수록 좋다.

- 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 성능은 떨어진다.

- 조회 성능을 빠르게 하기 위해 위에서 이야기한 참고사항들을 체크해 보지 않고

  무조건 인덱스를 추가하지 않도록 한다. 

 

 

728x90
반응형
LIST

'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