MySQL 에서 SQL 쿼리는
FROM - > ON -> JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY
순서로 동작한다고 알려져있습니다. FROM 으로 선택한 테이블에서 SELECT 로 원하는 칼럼을 추출하고 ORDER BY 로 정렬을 하는 구조입니다.
만약에 SELECT 절에 A 칼럼만 보도록 적었는데 ORDER BY 에 B 칼럼을 적으면 정렬이 될까요?
신기하게도 잘 됩니다!!
SELECT name, created_at FROM store ORDER BY created_at asc
=========================
이름 생성 시각
A 2021-05-11 06:12:50
B 2021-05-11 06:12:50
C 2021-05-11 06:12:50
D 2021-05-28 06:08:15
E 2021-05-31 03:13:52
위의 SELECT 절에서 created_at 을 제거하더라도 순서가 보존됩니다.
SELECT name FROM partner ORDER BY created_at asc
=====================
이름
A
B
C
D
E
혹시 원래 A,B,C,D,E 순서대로 저장된건 아닐까요? 이번엔 정렬 순서를 반대로 해봅시다
SELECT name FROM partner ORDER BY created_at DESC
========================
이름
Z
Y
X
W
V
순서가 잘 바뀌는 걸 확인할 수 있습니다.
제게는 상당히 신기한 경험이었습니다. Query Optimizer 가 실행 순서를 실제로 바꾸고 다양한 실행 계획을 세우기 때문에 일어난 일인데, 선언적 언어가 좋으면서도 위험한 것 같기도 하네요
'개발' 카테고리의 다른 글
NOT IN 절에 NULL 을 넣으면 동작을 제대로 안한다. (0) | 2023.08.25 |
---|---|
Anti-Caching A New Approach to Database Management System Architecture 논문 요약 (0) | 2023.08.20 |
ZGC 에 대하여 (0) | 2023.06.20 |
Scale-out 할 때 쓸만한 여러 컴포넌트들 (0) | 2022.04.20 |
Hibernate 6.0 Final 릴리즈!! (0) | 2022.04.05 |