DB - Oracle SQL SELECT 쿼리 실행 순서
SQL 쿼리문을 실행하는데 순서가 존재한다.
SELECT 쿼리문은 FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY 총 6단계를 거친다.
1. FROM
SELECT문이라 맨 처음 SELECT문을 실행할거 같지만 첫번째는 FROM문을 통해서 SELECT하고자 하는 전체 테이블을 가지고 온다.
2. WHERE
FROM절에서 읽어온 테이블에서 WHERE 조건에 맞는 결과만 갖도록 데이터를 간추린다.
3. GROUP BY
선택한 컬럼으로 그룹핑하는 작업을 한다.
4. HAVING
GROUP BY 된 이 후 사용되는 조건절이다. WHERE절과 동일하게 조건을 주어 사용할 수 있지만 쿼리 실행 순서 차이에 영향으로 쿼리 성능상에 차이를 가지고 올 수 있다.
예를들어서 다음과 같은 테이블이 존재한다고 가정해보자.
이때 SALARY가 20000 이상인 사람의 이름을 SELECT하려고 한다.
WHERE절을 사용한다면 쿼리문 실행 순서상 전체 테이블을 가지고 온 후 Steven만 남을 것이고 그 후 그룹핑하는 과정에서도 남은 튜플은 하나이기때문에 금방 SELECT문의 결과가 나올것이다.
하지만 WHERE절을 사용하지않고 똑같은 조건을 HAVING절에서 처리하게 된다면 전체테이블을 가지고 온 후 그룹핑하는 과정에서 전체 테이블에 튜플들을 그룹핑 처리후에 HAVING절을 해야하므로 속도에서 느려질수밖에 없다. 이처럼 WHERE절에서 일반 조건을 처리하는 방식이 효율적이며, 적은 데이터에서는 큰 차이가 없을수 있지만 데이터에 양이 늘어날수록 성능에 차이는 커질 수 밖에 없다.
5. SELECT
이렇게 조건들을 처리해주고 난 후 담은 데이터에서 어떤 컬럼들을 출력해줄지 SELECT한다.
6. ORDER BY
마지막으로 행의 순서를 어떻게 보여줄지 정렬해주는 ORDER BY절이 실행되며 끝난다.
'Database' 카테고리의 다른 글
SQL - JOIN (0) | 2021.05.23 |
---|---|
DB - 데이터베이스 관련 용어 정리 (0) | 2021.05.18 |
DB - Transaction 정리 (0) | 2021.05.01 |
DB - MySql 명령어 (0) | 2021.04.28 |
DB - Oracle & MySql 쿼리문 차이 정리 (1) | 2021.04.27 |
댓글