본문 바로가기

개발일지/TIL

[231030] MySQL 데이터 분석을 위한 SQL 작성 어려움...

데이터 분석 의도

💬 회사에서 조회 속도 향상을 위해 일정 주기로 데이터를 통합하기로 했습니다. 데이터 분석을 통해 기준을 세우고 코드를 작성해 특정 시간이 되면 배치 작업이 돌아가도록 하기로 했습니다.

 

데이터 분석을 하며 느낀 문제점

💬 데이터 건수가 많다보니 JOIN, WHERE 등이 들어가면 실행이 몇 십분 씩 걸린다는 것이었습니다. 거기에 더해 제가 SQL를 미숙한 것까지 합쳐져서 더 나은 방안을 제시할 수가 없었다는 것이었습니다.

 

문제점을 해결하기 위한 노력

💬 내가 짠 SQL문에서 더 나은 방향성은 없는지 인터넷을 찾아보면서 고쳐보는 수밖에 없다고 판단했습니다.
     ➡ 1번 문제점은 IN을 통해 데이터가 유효성을 검사하고 있었습니다. 찾아보니 IN은 모든 컬럼값을 직접 비교를 하기 때문에 데이터의 건수가 많아질수록 급격하게 느려진다는 것을 알았습니다. IN 대신 Exists 또는 JOIN을 쓰는 것이 좋다고 했습니다. 그래서 제가 많이 사용해본 JOIN으로 선택했습니다.       
     ➡ 2번 문제점은 group by의 위치였습니다. 제가 짜놓은 쿼리문에는 join 이후에 group by가 실행되고 있었습니다. join 하기 이전으로 group by로 옮겨서 처리 속도 향상을 노려보았습니다. 

💢 위와 같은 조치를 취해도 여전히 너무 느렸습니다. 데이터를 한 번 추출하는 데에 몇 십분이 걸리는건 여젼했습니다. 그래서 주변 개발 6년차 분에게 조언을 구했습니다.
     ➡ EXPLAIN을 사용해서 쿼리문에 대해 분석을 해보고 문제 되는 점을 수정해볼 것을 조언해줬습니다.
     ➡ 현재 더 많은 데이터 쪽에 JOIN을 걸어뒀는데 더 적은 쪽 데이터에 JOIN을 고려해보라고 했습니다.
     ➡ 테이블에 걸린 인덱스를 확인해보고 그것을 이용해보는 것도 좋은 방안이라고 했습니다.

 

 생각

💬 시간이 너무 늦었기에 내일 추가적으로 해보려고 합니다. 여전히 미숙하지만, 오늘 이러한 경험을 통해 나는 더욱 더 성장할 것입니다. 쿼리문에 더욱 익숙해지고 약한 부분을 더 보완할 수 있는 시간이 되길 바랍니다. 그런 의미로 내일 더 해보고 글도 작성하고 기록해보아야겠습니다.