[SQL] 쿼리 실행 순서 알아보기

김정연·2024년 7월 3일
0

최근에는 회사에서 쿼리를 통해 구매재고, 판매재고, 보유재고, 판매불가재고, 이익율 등 통계쪽을 맡아서 진행하고 있다. 그러다보니 join을 많이 걸고 쿼리를 길게 쓰게 되었는데 실행속도가 너무 길어 오늘은 쿼리 실행순서를 공부해본다.

원래 내가 생각했던 쿼리 실행순서의 첫번째는 from > select > where 순이라고 생각했는데 전혀 아니었다ㅠ

실행순서가 중요한 이유

  1. 쿼리 작성 : 실행 순서를 알아야 쿼리를 올바르게 작성할 수 있다.
  2. 성능 최적화 : 데이터베이스에 데이터의 양이 매우 많다면 조회하는데 비효율적으로 시간을 보낼 수 도 있다. 그래서 where절을 활용해 필요한 데이터만 필터링 하면 빠른 시간에 빠른 값을 볼 수 있다.
  3. 디버깅 : 쿼리가 예상한대로 데이터를 리턴하지 못했을 때 실행순서를 따라가며 유추해보면 각 단계에서 어떻게 쿼리가 작동하는지 알 수 있다.
  4. 리소스 관리 : 효율적인 쿼리는 리소스를 적게 사용해서 여러개의 작업을 처리할 수 있도록 해준다.

실행순서

FROM(JOIN 포함) > ON(JOIN 조건) > WHERE > GROUP BY > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT/OFFSET

FROM(JOIN 포함)

FROM절에 있는 테이블이나 뷰를 체크하고 JOIN까지 처리된다.

ON(JOIN 조건)

ON table1.id = table2.id와 같은 조건이 처리되고, AND 같이 JOIN에 붙이는 조건도 포함된다.

WHERE

필요한 데이터를 필터링 하고 맞지 않는 조건의 row는 제외된다.

GROUP BY

데이터를 특정 컬럼의 값을 기준으로 묶는다.

HAVING

GROUP화 된 데이터에 조건을 지정할 수 있고, 필터링을 할 수 있다.

SELECT c.customer_id , b.TITEL from customer c
inner join board b on c.idx = b.customerIdx 
where b.createDate BETWEEN '2024-01-01' AND '2024-01-31'
group by c.customer_id
HAVING c.age > 20 
order by b.createDate desc 
limit 10 ;

예를 들어 위 컬럼의 실행순서를 살펴본다.

  1. From 절에서 customer 이 조회되고 join 을 통해 board도 조회된다.
  2. where 절에서 날짜로 데이터가 필터링 된다.
  3. group by 로 customer_id로 그룹화하고, having으로 필터링 된다.
  4. order by 로 정렬되고 limit으로 10개까지 보인다.

실행순서를 이정도만 알아도 쿼리 속도를 빠르게 하는 것에 도움이 될것이다. 끝!

profile
백엔드 개발자

0개의 댓글