본문으로 바로가기

[SQL 튜닝] 기본적인 튜닝 절차

category Data Analysis/SQL Tuning 2023. 11. 13. 10:09
반응형

기본적인 튜닝 절차

  1. SQL문 실행결과 & 현황 파악
    1. 결과 및 소요시간 확인
    2. 조인/서브쿼리 구조
    3. 동등/범위 조건…
  2. 가시적
    1. 테이블의 데이터 건수
    2. SELECT덜 컬럼 분석
    3. 조건절 컬럼 분석
    4. 그루핑/정렬 컬럼
  3. 비가시적
    1. 실행계획
    2. 인덱스 현황
    3. 데이터 변경 추이
    4. 업무적 특징
  4. 튜닝 방향 판단 & 개선/적용

1. SQL 문 단순 수정으로 착한 쿼리 만들기

  • 기본 키를 변형하는 나쁜 SQL 문
    • 기본 키를 변형하지 않는 조회 조건을 넣어야한다.
  • 사용하지 않는 함수를 포함하는 나쁜 SQ문
    • 불필요한 ifnull 함수를 사용해서 인덱스를 활용 못하는 경우
  • 형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문
    • 문자열을 숫자 취급해서 인덱스를 활용 못하는 경우
  • 열을 결합하여 사용하는 나쁜 SQL 문
    • 열을 분리하지 않고 합쳐서 인덱스를 활용 못하는 경우
  • 습관적으로 중복을 제거하는 나쁜 SQL문
    • Distinct는 정렬작업을 포함하므로, 중복을 제거하는 작업이 필요한지 고민해봐야 한다.
  • 다수 쿼리를 UNION 연산자로만 합치는 나쁜 SQL 문
    • DISTINCT가 사용되는 UNION보다는 UNION ALL을 사용
  • 인덱스 고려 없이 열을 사용하는 나쁜 SQL 문
    • 인덱스 컬럼 순서대로 그루핑
  • 엉뚱한 인덱스를 사용하는 나쁜 SQL 문
    • 인덱스 범위를 줄일 수 있는 컬럼으로 where에 사용
  • 동등 조건으로 인덱스를 사용하는 나쁜 SQ문
    • 인덱스 자동 사용이 비효율적이라면 IGNORE INDEX (인덱스) 힌트를 사용할 수 있다
  • 범위 조건으로 인덱스를 사용하는 나쁜 SQL 문
    • 인덱스 스캔으로 랜덤 액세스의 부하가 발생하도록 하기보다 테이블 풀 스캔 방식을 고정적으로 설정하도록 하는 것이 효율적일 수 있음

2. 테이블 조인 설정 변경으로 착한 쿼리 만들기

  • 작은 테이블이 먼저 조인에 참여하는 나쁜 SQL 문
    • STRAIGHT_JOIN을 활용해 데이터가 큰 테이블에 where절이 먼저 걸릴 수 있도록 한다
  • 메인 테이블에 계속 의존하는 나쁜 SQL문
    • 메인 테이블을 여러번 사용하지 않도록 Group by 와 having 절을 적절히 사용한다
  • 불필요한 조인을 수행하는 나쁜 SQL문
    • 존재여부만 확인이 필요한 경우, EXISTS 를 활용한다.

 

References

Book. 업무에 바로 쓰는 SQL 튜닝

반응형

'Data Analysis > SQL Tuning' 카테고리의 다른 글

[SQL 레벨업] 2장. SQL 기초  (0) 2023.12.19
[SQL 레벨업] 1장. DBMS 아키텍쳐  (0) 2023.12.13
[SQL 튜닝] 실행계획  (0) 2023.11.13
[SQL 튜닝] 기본개념  (0) 2023.11.13