코딩항해기

[리뷰/우아한테크] MySQL 성능 최적화 본문

IT tech

[리뷰/우아한테크] MySQL 성능 최적화

miniBcake 2024. 11. 28. 17:05

 

 

 

인덱스

 

[리뷰/우아한테크] 데이터베이스 INDEX

인덱스색인 기능을 수행한다. 색인은 쉽게 찾아볼 수 있도록 일정한 순서에 따라 놓은 목록을 의미한다. 인덱스 없이 저장된 데이터는 기준이 없어 select 할 때 모든 데이터를 비교해야하므로 느

minibcake.tistory.com

 

 

인덱스 사용 이유

DB에서 성능 최적화는 디스크 I/O와 관련된 것이 많다. 조회 성능을 개선한다는 것은 디스크 I/O를 줄이는 것이 핵심이다. 하드디스크의 I/O는 메모리 I/O에 비해 속도가 현저히 느리다. 

 

다만 인덱스는 조회에서는 좋지만 수정, 삭제 등에서는 성능이 저하된다는 단점이 있다. 그러나 일반적인 웹사이트에서 R CUD의 비율은 8:2에서 9:1정도 조회가 많기 때문에 조회에서 성능이 좋아진다면 약간의 저하가 있더라도 전체적으로는 성능이 개선되는 것이다.

 

특히 정렬을 할 때 인덱스가 아닌 컬럼이라면 데이터를 전부 읽고 정렬해야하므로 성능이 저하되지만 인덱스된 컬럼이라면 인덱스 순서대로 파일을 읽기만 하면되기 때문에 성능에 유리하다. (GROUP BY도 동일)

 

 

사례

 

nickname에 인덱스를 걸었으며, type이 range로 바뀐 것을 확인할 수 있다.

 

 

복합인덱스의 경우 (두 개 이상의 컬럼을 합쳐서 인덱스를 만든 것) = 컴포지션 인덱스

복합인덱스의 경우 정렬이 두 번 일어나기 때문에 조건을 두 개 걸어도 탐색하는 범위가 높아져 성능에서 유리하다. 다만 순서를 반대로 조회한다면 해당 정렬을 사용할 수 없어 데이터를 풀 스캔해야하므로 성능이 저하되는 문제가 있으니 적절히 고려해 적용하는 것이 중요하다.