본문 바로가기

DataBase

[DataBase] Select 쿼리 실행순서

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 절

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

 

'DataBase' 카테고리의 다른 글

[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
[DataBase] Sql Injection  (0) 2023.01.15