본문 바로가기

DataBase

[DataBase] Select 쿼리 실행순서

728x90

Select 쿼리 실행순서

Select 쿼리를 실행하게되면 따라오는 쿼리들의 실행순서가 존재합니다.

 

사실 당연히 DB 내에서 실행순서가 존재는 하겠지만, 이것이 개발자에게 중요한 개념이라는 것을 인지하지 못하였습니다.

따라서 이번글에서는 실행과정과 왜 중요한지에 대해 글을 작성하겠습니다.

Select 쿼리 실행순서 과정

 

종류 : SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY

 

1. FROM 절

제일 처음 FROM 절에 명시되어있는 테이블의 데이터를 가져옵니다.

 

2. WHERE 절

FROM 절에서 읽어온 테이블의 데이터에서 조건에 맞는 결과만 필터링합니다.

 

3. GROUP BY 절

GROUP BY로 명시된 컬럼(열)을 기준으로 공통된 값들끼리 그룹화 시킵니다.

 

4. HAVING 절

GROUP BY 절이 쿼리에 있을 경우 HAVING 절의 조건이 그룹화된 행에 적용됩니다.

 

5. SELECT 절

앞서 과정을 거친 데이터들중 어떤 컬럼(열)을 출력해줄지 선택합니다.

 

6. DISTINCT 절

출력해줄 데이터들이 정해졌다면 데이터의 중복을 제거합니다.

 

7. ORDER BY 절

출력해줄 데이터들이 정해졌다면 행의 순서를 어떻게 보여줄지 정렬해줍니다.

 

 

Select 쿼리 실행순서 이유

이런 실행 순서가 있는 이유를 앞서 설명드린 하는일에 빗대어 생각해보겠습니다.

또한 중요 포커싱 대상은 성능입니다!! 

 

1. FROM 절

DB 입장에서 수많은 테이블과 데이터들이 있는 상황입니다.

이 데이터들 중 분명 쿼리를 날린 개발자가 필요한 데이터는 일부분이겠죠.

그럼 DB입장에서 다룰 데이터들을 최대한 빠르게 줄여주는것이 포인트일 것 같습니다.

 

따라서 DB는 가장 큰 단위인 테이블을 선택하여 다룰 데이터들을 줄입니다.

 

 

2. WHERE 절

앞서 설명드린 이유에 기반하여 더 빠르게 DB가 다룰 데이터들을 줄이는 쿼리가 무엇이 있을까요?

 

HAVING, WHERE 정도 있을겁니다.

 

그럼 DB는 더욱 많이 줄여주는 쿼리를 선택해야 할 것입니다.

HAVING은 그룹화된 데이터들을 대상으로 조건을 걸기 때문에 WHERE보다 퍼포먼스가 약합니다.

 

따라서 WHERE 절을 먼저 실행하여 데이터를 줄여주게 됩니다.

 

 

3. GROUP BY 절

앞서 설명드린대로 DB의 입장에선 계속해서 자신이 다룰 데이터들을 줄여야합니다.

따라서 그룹화를 진행한 후, HAVING 으로 데이터를 줄이는 작업을 먼저 진행하려 할 것입니다.

 

또한 여기서 주의할점이 등장합니다.

어찌됐든 쿼리의 순서가 GROUP BY 후에 SELECTORDER BY가 실행이됩니다.

GROUP BY는 명시된 데이터들만을 선택해 그룹화하므로 GROUP BY에 명시된 데이터, 집계함수를 사용한 데이터 이외엔 SELECT, ORDER BY에 올 수 없습니다.

 

 

4. HAVING 절

그룹화를 진행했으니 그에따른 조건이 있다면 필터링을 하여 다룰 데이터를 줄여줍니다.

 

 

5. SELECT 절

위의 과정들을 다 거치고서야 어떤 컬럼들을 출력시켜줄지 정하게됩니다.

 

 

6. DISTINCT 절

출력해줄 컬럼들이 정해졌다면 중복을 제거합니다.

 

 

7. ORDER BY 절

정렬과정은 비교적 비용이 많이 드는 작업인만큼 제일 마지막에 배치되게됩니다.

 

728x90

'DataBase' 카테고리의 다른 글

[DataBase] DBCP  (0) 2024.04.11
[DataBase] DBMS 기본 용어  (0) 2023.08.02
[DataBase] MySQL vs Oracle  (0) 2023.07.28
[DataBase] 사용자  (0) 2023.07.19
[DataBase] MySQL 시스템 변수  (0) 2023.07.18