핵심 메시지

정렬을 쓰지 않으면, 반환 순서는 데이터가 아니라 실행 계획이 만듭니다

같은 SELECT * FROM products라도 DBMS가 어떤 경로로 읽느냐에 따라 화면에 보이는 순서가 달라집니다. 순서를 계약으로 만드는 장치는 ORDER BY뿐입니다.

공통 전제
SELECT * FROM products;
경로 1
테이블 풀 스캔
A -> B -> C

힙에 적재된 물리 순서를 따라 읽으면, 우연히 입력 순서처럼 보일 수 있습니다.

경로 2
인덱스 스캔
B -> C -> A

옵티마이저가 인덱스를 택하면 반환 순서도 그 인덱스 키 흐름을 따릅니다.

경로 3
병렬 실행
A -> C -> B

여러 워커가 읽은 조각을 합치므로, 이전 실행과 같은 순서를 기대할 수 없습니다.

실무 원칙

정렬이 필요하면 반드시 ORDER BY를 명시합니다. 통계 갱신, 버전 변경, 병렬화로 실행 계획이 바뀌면 결과 순서도 함께 바뀝니다.