개발로 자기계발
728x90

웹이든 앱이든 데이터베이스(DB)와 연결되어 있고, 쿼리를 사용한다면 SQL 튜닝은 언제나 중요한 이슈가 된다. 그래서 MySQL을 주 DB로 사용하는 입장에서 관련 서적을 자주 접하게 된다.

이번에 읽은 책은 "업무에 바로 쓰는 SQL 튜닝"으로 MySQL과 MariaDB에서 SQL 튜닝을 시작하려는 사람들을 대상으로 한 입문서라고 소개되어 있었다.

이 책의 목차는 다음과 같다:
1장 MySQL과 MariaDB 개요
2장 SQL 튜닝 용어
3장 SQL 튜닝의 실행 계획
4~5장 악성 SQL 튜닝

 

MySQL과 MariaDB 개요

이 장에서는 MySQL과 MariaDB의 역사 그리고 오라클과의 비교를 통해 몇 가지 쿼리 차이점을 간략히 설명한다. 제목 그대로 개요만 다루고 있어 별다른 깊이 있는 내용은 없다.

 

SQL 튜닝 용어

여기부터는 SQL 수행 과정, 쿼리 용어, 테이블 용어 그리고 튜닝 용어들에 대한 설명이 시작된다. 설명에 연관된 사진들도 첨부되어 있어 이해하기에 어렵지 않다고 느꼈다. 특히 SQL에 대한 기본적인 지식이 있는 사람들에게는 더욱 유용할 것 같다.

 

SQL 튜닝의 실행 계획

MySQL/MariaDB 환경 구성을 시작으로 실행 계획에 등장하는 요소들을 설명한다. 실행 계획을 파악하는 것이 쿼리 분석의 첫걸음이기 때문에 기본적인 내용을 이해하는 데 도움이 된다.  실습을 함께 하니 이해가 더욱 쉬웠다.

 

악성 SQL 튜닝

3장에서 구성한 데이터베이스 환경을 바탕으로 4장에서는 본격적인 튜닝 실습이 진행된다. 튜닝 전후의 쿼리를 실행 계획을 통해 분석하며 튜닝 방법을 학습한다. 형 변환, 함수 제거, 인덱스 순서 조정, 데이터 분포 등을 다루며

 

특히 드라이빙 테이블과 관련된 사례를 하나 소개 해보려고 한다.

데이터 수: 부서(9), 부서사원_매핑(필터링 후 약 1300개 이상)

드라이빙 테이블: JOIN 방식에 따라 달라지겠지만 첫 번째로 읽히는 테이블로 생각하면 쉽다.

 

튜닝 전 쿼리

SELECT 매핑.사원번호,
       부서.부서번호
FROM 부서사원_매핑 매핑,
     부서
WHERE 매핑.부서번호 = 부서.부서번호
  AND 매핑.시작일자 >= '2002-03-01';

튜닝 후 쿼리

SELECT STRAIGHT_JOIN
       매핑.사원번호,
       부서.부서번호
FROM 부서사원_매핑 매핑,
     부서
WHERE 매핑.부서번호 = 부서.부서번호
  AND 매핑.시작일자 >= '2002-03-01';

여기서 튜닝은 STRAIGHT_JOIN 키워드를 추가하는 것으로 진행되었다. 이 키워드는 MySQL에서 조인 순서를 고정하는 역할을 한다.

즉 STRAIGHT_JOIN을 사용하면 FROM 절에 명시된 순서대로 조인이 수행된다. STRAIGHT_JOIN 키워드를 사용하지 않으면 MySQL 옵티마이저가 자동으로 조인 순서를 결정하게 된다. 이 과정에서 옵티마이저는 부서 테이블을 드라이빙 테이블로 선택할 가능성이 있다.

 

이를 통해 성능이 어떻게 개선되는지 비교 분석해 보았다. 작은 테이블을 먼저 읽고 큰 테이블과 조인하는 것과 큰 테이블을 필터링 후 작은 테이블과 조인하는 방법의 차이점을 예시로 잘 보여주고 있다.

조인방식 설명
작은 테이블을 먼저 읽고 큰 테이블과 조인 작은 부서 테이블을 여러번 반복해서 읽으면서 매번 부서사원_매핑 테이블을 스캔한다.
이 경우 부서사원_매핑 테이블을 여러 번 읽어야 하므로 더 많은 I/O 작업이 발생할 수 있다.
큰 테이블을 필터링 후 작은 테이블과 조인 큰 테이블에서 필터링된 데이터를 한 번에 메모리에 로드하고 작은 부서 테이블을 조인한다.
필터링된 데이터를 한 번에 메모리에 올리고 이후 조인 작업을 수행하므로 전체적으로 더 적은 I/O가 발생할 수 있다.

일반적으로 작은 테이블을 드라이빙 테이블로 사용하는 이유는 작은 테이블을 먼저 읽고 그 결과를 가지고 큰 테이블에서 매칭되는 데이터를 찾는 것이 더 효율적이기 때문인데 반대되는 좋은 예시가 나와서 좋았다.

 

5장에서는 더 복잡한 쿼리를 분석하고, 테이블의 인덱스 조정과 파티셔닝을 통한 쿼리 튜닝 방법도 소개한다.

 

결론

이 책은 "SQL 튜닝을 시작하는 사람들을 위한 튜닝 입문서"로서 역할을 한다. SQL 튜닝의 기본 개념을 잡고자 하는 분들에게 추천할 만한 책이라고 생각이 든다. 처음 튜닝에 대해 감을 잡기 어려운 분들에게 특히 유용할 것이다.

728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)