728x90
문제발생
- 어느 날부터 “NFT 연관 키워드 사이트 [링크]“ 에서 키워드를 불러오는데 10초이상이 소요
문제원인
- 프론트단은 빨리 로딩되는 반면 백엔드단의 api를 불러오는데 시간이 소요됨
- 소요시간: 10.35초
- 데이터가
10,000 ~ 100,000
일 때는 체감되지않았지만 약5,000,000 ~ 9,700,000 (현재)
값을 where절을 이용해여 select 시 체감되는 시간의 증가- 현재 데이터양
해결방안
1. 현재 필요한 데이터 외 나머지를 삭제한다.
2. where절에 사용되는 컬럼을 INDEX로 설정해준다.
채택
- 사실상 현재는 필요없는 데이터를 지우는 1번 방법이 더 낫지만 많은 데이터를 핸들링해볼 수 있는 2번 방법으로 채택
SELECT 컬럼 FROM 테이블명 WHERE cerated_date BETWEEN ? AND ?
의 SQL문으로 실행- 컬럼이 생성된 시간인 created_date의 경우 카디널리티가 높고 선택도가 낮기때문에 INDEX로 설정하기에 적합하다고 생각
적용기
CREATE INDEX 인덱스명 ON 테이블명(컬럼명)
- 인덱스명에 대한 컨벤션을 알아보던중 stackoverflow 에서 찾은 ind_컬럼명으로 설정
- 그래서
CREATE INDEX ind_created_date ON 테이블명(created_date)
으로 인덱스 생성SHOW INDEX FROM 테이블명
을 통해 조회
결과
- 소요시간: 0.4초
- 10.35초 → 0.4초 개선
마무리하며
- 인덱스포스팅을 통해서 이론적으로만 알고있었지만 직접 적용하여 성능적으로 개선을 경험하니 인덱싱의 이점에 대해서 더 직접적으로 알게 되었다.
'SQL' 카테고리의 다른 글
스프링 테스트에서의 @Transactional (0) | 2022.04.20 |
---|---|
트랜잭션 (Transaction) (0) | 2022.04.20 |
[SQL] Index ( 인덱스 ) 의 구조와 동작 (0) | 2022.02.25 |