SELECT DISTINCT와 JOIN을 하면 무조건 Tmp table이 생기나요? 0 1 657

by 음미 [SQL Query] using_temporary [2021.12.28 10:59:01]


SELECT DISTINCT와 JOIN을 하면 무조건 Tmp table이 생기나요?

아래와 같은 쿼리를 작성(실험및 질문을 위해 단순화 했습니다)했는데요. distinct를 하려는 컬럼이 primary key 인 Id임에도 불구하고 EXPLAIN을 해보면 music_audiofile에서 using temporary라고 뜹니다. 실제로 쿼리를 실행하고 SHOW STATUS LIKE "Created_tmp%"; 를 확인해보면 tmp TABLE이 만들어진 것을 확인할수도 있었습니다.


DESCRIBE SELECT DISTINCT 
`music_track`.`id`
FROM
`music_track`
INNER JOIN `music_audiofile` ON
(`music_track`.`id` = `music_audiofile`.`track_id`)
WHERE
(`music_audiofile`.`flags` IN (820, 21, 111, 200));
			


JOIN을 하고 SELECT DISTINCT를 하면 무조건 tmp Table이 생긴다고 이해해야 할까요?? 혹시 개선할 방법이 없을까요?

by 마농 [2021.12.28 14:07:37]

무조건 tmp Table이 생긴다고 생각하는 근거가 있나요?

-- Exists --
SELECT id
  FROM music_track a
 WHERE EXISTS (SELECT 1
                 FROM music_audiofile b
                WHERE b.track_id = a.id
                  AND b.flags IN (820, 21, 111, 200)
               )
;

-- IN --
SELECT id
  FROM music_track a
 WHERE id IN (SELECT track_id
                FROM music_audiofile b
               WHERE b.flags IN (820, 21, 111, 200)
              )
;

 

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