[튜닝일지] 1. Index, 너 잘 타고 있니? [백엔드 개발자의 쿼리 튜닝일지]

2024. 4. 15. 11:14·◈ Refactoring/쿼리 튜닝일지🔧
728x90

1. Index, 너 잘 타고 있니?

이번에 담당하게 된 프로젝트가 있는데 사이트 로딩 속도가 매우 느렸다.
아래와 같이 쿼리 조회 자체가 안되는 경우도 많아서 쿼리부터 개선 해보자는 마음으로 시작했다.
(웹에서도 관련 기능이 당연히 동작 안하는데, 고객사는 안되는 거라 생각하고 못쓰고 있었다고 한다..😂😂)

쿼리야.. 너 잘 돌고 있니..?


소스를 분석하면서 view에서 실행속도가 느리다는 걸 파악했다.
view가 view를 join하고 중첩하여 참조하다보니 실행 속도가 배로 느려진 것..
(이 중 300초 초과되는 검색과 관련된 view는 특정 view를 3번에 걸쳐 참조하고 있었다.)

꼬리에 꼬리를 무는 view~🐍

 

보안 상의 이유로 view 이름을 공개할 수는 없지만, 위에 표에서 노란색으로 되어 있는 view는 성능이 낮은 모든 view에서 참조하고 있었다. 그래서 해당 view부터 개선하려고 view 코드를 확인했다.

모두에게 영향을 주는 view, 너 이 자식..

 

그는 재귀쿼리였다.

 

말은 거창하게 했지만, 그냥 본인 자체를 한 번 더 참고하고 하는 그런 친구다.

본격적인 쿼리 튜닝을 위해 EXPLAIN 명령어로 인덱스 여부를 잘 타는지 확인하였다.
아래 쿼리를 보면 a라는 테이블이 인덱스를 타지 않는 것을 확인할 수 있었다.

a야, 왜 인덱스를 타지 않고 있는 것이더냐?

 

a 테이블이 인덱스 타지 않아 a 테이블이 문제인 줄 알았으나, c 테이블의 컬럼을 주석해보니 c 테이블과 join을 하면서 a 테이블이 인덱스를 타지 못하는 것이였다. c 테이블의 컬럼들을 서브쿼리로 변경해주었다.

a 테이블은 fake였으며, 최종보스는 c였다.
c 테이블 컬럼들을 서브쿼리로 변경해주니 모든 테이블이 인덱스를 정상적으로 잘 탔다.

 


 

모든 테이블이 정상적으로 인덱스를 타니, 실행속도가 5초 중후반이였던 쿼리가 1초 후반대로 개선되었다.

SUCCESS👍🏻


728x90
'◈ Refactoring/쿼리 튜닝일지🔧' 카테고리의 다른 글
  • [튜닝일지] 5. 쿼리문 조건에도 순서가 있다? [백엔드 개발자의 쿼리 튜닝일지]
  • [튜닝일지] 4. 숫자 ID vs 텍스트 ID [백엔드 개발자의 쿼리 튜닝일지]
  • [튜닝일지] 3. 믿었던 Function이 날 배신했다. [백엔드 개발자의 쿼리 튜닝일지]
  • [튜닝일지] 2. JOIN, 잘 좀 만나봅시다. (feat. or 조건) [백엔드 개발자의 쿼리 튜닝일지]
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (937)
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (32)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (40)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (4)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (89)
        • 백준(BOJ)👨🏻‍💻 (70)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
        • 알고리즘(Algorithm)🎡 (10)
      • ◈ Study (102)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (34)
        • 웹 보안(Web Security)🔐 (6)
      • ◈ 공부모임 (39)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (11)
      • ◈ 자격증 공부 (37)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (113)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (44)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 태그

    BOJ
    spring
    백준 티어
    일상
    jsp
    Java
    CSS
    프로그래밍
    Database
    javascript
    SQL
    Error Note
    자바스크립트
    백준
    코딩
    꿀팁
    Oracle
    코딩 테스트
    html
    Project
  • 250x250
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[튜닝일지] 1. Index, 너 잘 타고 있니? [백엔드 개발자의 쿼리 튜닝일지]
상단으로

티스토리툴바