데이터베이스/RDBMS

[MySQL] 쿼리 플랜 확인 및 인덱싱을 통한 쿼리 최적화

이민훈 2022. 9. 23. 18:36

사내에서 개발 중인 백오피스의 특정 페이지 로딩이 갈수록 점점 느려졌다.

네트워크 탭을 확인해보니 api 3개의 응답시간이 무려 최대 3.6초대가 나왔다.

 

 

해당 API에서 사용하는 쿼리를 직접 DB에 날려보니 쿼리가 매우 느리게 동작했고,

 

 

explain으로 실행 계획을 확인해보니..

 

 

cssc 테이블에서 SELECT 시 풀스캔을 하고 있었고, 로우 수가 많아 쿼리가 오래 걸렸던 것으로 분석된다.

 

 

그래서 해당 테이블의 조건절에 사용된 컬럼을 인덱스로 추가하였다.

create index 문은 아래처럼 쓰면 되는데, 자세한 내용은 링크를 통해 확인할 수 있다.

 

create index index_name on table_name(column1, column2, ...)

 

https://www.w3schools.com/sql/sql_create_index.asp

 

SQL CREATE INDEX Statement

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

인덱스를 추가하고 나서, 해당 API들의 응답속도가 300밀리 세컨드대로 내려오게 되었다.

 

 

pk나 unique 컬럼의 경우 자동으로 인덱스가 생성되나, 그 외 fk나 일반적인 컬럼의 경우 인덱스가 생성되지 않는다.

쿼리의 성능이 떨어진다면 유저들에게 좋지 않은 사용자 경험을 제공하게 되니, 쿼리 플랜을 잘 살펴볼 필요가 있다.