본문 바로가기
전공공부

쿼리 튜닝에 대하여(기초)

by 시아나 2026. 3. 29.

이번 프로젝트에서 쿼리를 다룰일이 많다. 

DB를 많이 사용하다보니 select할 때 시간이 많이 걸리기 때문에 쿼리튜닝이 필수였다.
쿼리튜닝은 DBA가 해주지만 DBA가 바빠서 그런지 응답 시간이 오래걸리고 있어서

내가 공부해서 튜닝해보자! 라는 생각으로 쿼리 튜닝에 대해 공부하게되었다.

 

쿼리 튜닝은 무엇인가?

쿼리 튜닝은 DB에서 데이터를 꺼낼때 사용할 수 있는 '지름길'을 찾는 과정이다.
즉, 쿼리를 최적화 하는 과정을 쿼리 튜닝이라고 한다.

같은 결과를 가진 쿼리라도 더 빠르게 조회할 수 있는 길이 있다.

 

쿼리 실행 계획

쿼리 튜닝을 위해서는 쿼리 실행 계획을 확인해봐야한다.

쿼리 실행 계획은 DB엔진이 어떻게 해당 SQL문을 실행할지를 확인하는 기능이다.

SELECT * FROM event;

위 쿼리에 대한 실행 계획은 아래와 같다.
첫번째 그림은 쿼리 실행계획을 표형식으로 보여주는 방식이고

두번째 그림은 그림으로 보여주는 방식이다.

select_type 은 쿼리의 종류를 의미한다.
SIMPLE, SUBQUERY, UNION 등이 있다.

table은 현재 조회하고 있는 테이블의 명을 의미하고

type은 데이터를 읽는 방식을 의미한다.
-> type은 쿼리 튜닝에서 중요하기 때문에 후에 다시 설명하겠다.

key는 사용된 인덱스의 이름이다.

rows는 해당 단계에서 읽을 것으로 예상되는 행의 수이고

filtered는 where에 의해 걸러지는 데이터의 비율을 의미한다.

 

여기서 가장 중요하다고 볼 수 있는
type(데이터 접근방식) 에 대해 더 알아보도록 하겠다.

 type 데이터의 접근방식 종류에는 6가지가 있다.

SYSTEM, CONST PK나 Unique 인덱스로 딱 1건만 조회할 경우로
최상의 상태를 의미한다.
EQ_REF 조인을 할 때, 상대 테이블의 데이터를 PK나 Unique 인덱스로 딱 1건씩 가져올 때를 의미한다.
효율적인 조인 상태이다.
REF Unique가 아닌 일반 인덱스로 조회할 때를 의미한다.
일반 인덱스 조인이다. 결과가 여러건 있을 수 있다.

정렬된 데이터에서 특정 데이터를 찾는 느낌이다.

ex) SELECT * FROM users WHERE name = '김철수'
이름에 인덱스가 걸려있는 경우
RANGE 특정 범위를 긁어올 때를 의미한다.

ex) where price between 1000 and 5000;
INDEX 인덱스 풀 스캔을 의미한다.

ex) S ELECT name FROM users ORDER BY name;
ALL 인덱스가 없어서 테이블 전체를 처음부터 끝까지 다 뒤질 때를 의미한다.

ref는 인덱스의 특정부분만 읽는 것이고
Index는 인덱스의 전체를 읽는 것이다.

 

이런 쿼리를 읽었을 때의 쿼리실행 계획은 아래와 같다.

select *
from country_status a
INNER JOIN region b
on a.rcode = b.rcode
order by seq;

 

쿼리 튜닝은 이렇게 조회한 쿼리실행 계획을 보고
비효율적인 계획을 효율적으로 변경하는 것이다.

 

쿼리 튜닝 방법

쿼리 튜닝의 가장 대표적인 방법은 인덱스 생성이다.

인덱스는
테이블에 있는 데이터를 특정 컬럼 기준으로
미리 정렬해서 별도의 공간에 저장해두는 것이다.

이를 통해 검색 속도를 향상시키고
정렬 시 소모되는 비용을 절약시킬 수 있다.

create index testindex on country_status(seq,rcode);

postgreSQL 기준 인덱스는 위 쿼리 처럼 만들 수 있다.

 

'전공공부' 카테고리의 다른 글

Kafka를 활용한 비동기 시스템  (0) 2026.03.14
CORS에는 왜 CSRF와 XSS가 따라 나올까  (0) 2026.02.21
CORS 너는 누구인가  (0) 2026.02.07
Nginx란 무엇인가?  (1) 2026.01.10
React useContext  (0) 2025.11.09