누가 더 빠른가 0 2 659

by RaceChu [SQL Query] [2019.10.06 12:03:43]


 

SELECT 

          학생 AS 학생1

        ,(SELECT 학생 FROM 학생테이블)   AS 학생2

   FROM 학생테이블

제 생각으론 당연히  학생1의 결과 출력값이 먼저일거라 생각했는데

학생2가 더 빠른 출력값이 나온다고 합니다.

 

이유가 무엇인지 혹시 아시는분 계신가요

몇일 고민하다가 답을 찾을수가 없어서 문의드립니다.

by 부쉬맨 [2019.10.06 13:10:54]

select 절을 먼저 읽기 때문에 빠릅니다.

select 절을 읽다가 (select list) 부분을 처리하고 from절을 들어가기 때문입니다.

맞나?기억이 가물가물

 


by jkson [2019.10.07 09:03:22]

일단 해당쿼리는 학생 테이블이 단건을 가진 게 아니라면 오류가 발생합니다.

스칼라서브쿼리는 항상 단일건을 리턴해야하기 때문이고요.

스칼라서브쿼리는 메인쿼리 수행 이후에 수행됩니다.

따라서 '빠른'의 의미가 수행순서라면 잘못 알고 계신 것입니다.

'빠른'의 의미가 스칼라서브쿼리가 단일건을 출력한다는 전제하에

데이터 소트 순서상 앞쪽의 것이 출력된다는 의미라면

정확한 쿼리와 실행계획을 보아야 할겠지만

from 절 이하 where절이 없으므로 메인쿼리는 풀테이블 스캔일 것이고

따라서 데이터 소트와 상관 없이 먼저 읽는 블록 데이터가 먼저 출력될 것입니다.

서브쿼리는 단건 출력이 목적이므로 되도록 풀스캔이 아닌 인덱스스캔이나

특정블록 액세스 접근을 위주로 실행계획이 만들어질 것입니다.

실행계획상의 차이로 앞쪽 데이터가 나왔을 확률이 높을 것 같습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입