ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DB] SQL 실행순서
    DBMS/데이터베이스 이론 2025. 1. 10. 21:05

     

     SQL 실행순서

     

    1. FROM

    어느 테이블에서 가져올건지?

    (FROM - ON - JOIN - +..)

    ( 이 단계에서 join이 실행되어 가상 테이블로 연결한다.

    여러개의 테이블이 연결된 후에 where, group by 등 그 다음 순서 진행된다)

     

    2. WHERE

    그 테이블에서 어떤 조건으로 데이터 가져올건지?

     

    3. GROUP BY

    어느 속성으로 집계하여 그룹화할건지?

     

    4.HAVING

    집계하여 생성된 그룹들을 어떤 기준으로 선별해올건지?

    ( where문과 다른점:

    where문은 가장 먼저 데이터를 가져올 때 적용된다. 데이터 필터링 기준이다.

    having문은 데이터를 가져오고 집계하여 그룹화된 것을 가져올때 적용된다. 그룹에 대한 기준이다.

    따라서 DB성능 높이기위해서는 가능한 WHERE문에서 데이터를 많이 걸러서 가져오는 것이 유리하다.)

     

    5. SELECT

    가져온 데이터들중에서 어떤 컬럼을 가져올건지?

     

    (이미 데이터를 가져온 다음에 그중에서 select로 선택하는 것이기 때문에

    SELECT * FROM posts와

    SELECT id FROM posts의  I/O 비용이 같다.

     

    하지만 인덱스에 필요한 컬럼들이 모두 저장되어 있다면 원벤 데이터에 접근하지 않고 인덱스에서 바로 가져오기 때문에 이때는 select로 필요한 컬럼만 가져오는게 더 비용이 싸다)

     

     

    6. ORDER BY

    마지막으로 가져온 데이터를 어떤순서로 데이터를 정렬할건지?

     

    ( order by는 select문 이후에 실행되기 때문에 select문에서 설정한 별칭도 사용할 수 있다.

    반면 group by는 select문 이전에 실행되기 때문에 group by에서는 별칭을 사용할 수 없다.)

     

     

    7. LIMIT / OFFSET

    정렬 이후 데이터를 몇번째부터, 몇개보여줄 지 결정한다.

     

     

     

    그럼 서브쿼리는 언제 실행될까?

     

    -> 메인쿼리가 먼저 실행되고, 메인쿼리 내에서 서브쿼리가 위치한 구문에 도달했을 때, 서브쿼리가 실행된다

     

    메인쿼리가 먼저 실행되기 때문에 서브쿼리에서는 메인쿼리의 컬럼을 사용할 수 있고, 메인쿼리에서는 서브쿼리의 컬럼을 사용할 수 없다.

     

     

     

     

    학습 팁

    SQL을 실행 순서대로 작성해보자

    SELECT -> FROM -> WHERE 순으로 작성하는 것이 아니라 FROM -> WHERE -> SELECT 순으로 작성하는 것이다.

    그러면 중간에 성능적으로 튜닝할 수 있는 요소를 발견할 가능성이 높아진다고 한다.

Designed by Tistory.