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 후에 SELECT 나 ORDER BY가 실행이됩니다.
GROUP BY는 명시된 데이터들만을 선택해 그룹화하므로 GROUP BY에 명시된 데이터, 집계함수를 사용한 데이터 이외엔 SELECT, ORDER BY에 올 수 없습니다.
4. HAVING 절
그룹화를 진행했으니 그에따른 조건이 있다면 필터링을 하여 다룰 데이터를 줄여줍니다.
5. SELECT 절
위의 과정들을 다 거치고서야 어떤 컬럼들을 출력시켜줄지 정하게됩니다.
6. DISTINCT 절
출력해줄 컬럼들이 정해졌다면 중복을 제거합니다.
7. ORDER BY 절
정렬과정은 비교적 비용이 많이 드는 작업인만큼 제일 마지막에 배치되게됩니다.
'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 |