프로그래밍/MySQL

[MySQL] Where In & SubQuery 는 최악! JOIN & MAX & GROUP BY 사용

jihun202 2022. 9. 29. 11:42
반응형

최근에 구축 중인 사이트가 있는데, 방대한 양의 시세 정보 데이터를 적재하고 이를 검색서비스를 제공하는 사이트이다. 

여러 다른서버들이 있어 다른서버의 시세도 한눈에 보게끔 해주고 싶었는데, 아무 생각 없이 where 에 in 으로 서브 쿼리를 넣어 주는걸로 작성을 해주었더니, 시간이 매우 오래 걸렸다.

 

SELECT * FROM auction
	WHERE idx IN (
    	SELECT MAX(idx) FROM auction
        	WHERE item_id = :item_id
            GROUP BY realm_id, auction_house_id, item_id)
    ORDER BY price_min DESC;

위 쿼리의 결과가 도출되는데 4초에서 6초가 소요되었다. 개선을 해볼수 있지 않을까 싶어 여러 검색을 해보았는데, where 에서는 서브 쿼리를 절대 쓰지 말라, join 을 사용하라는 글이 많이 있어 join 으로 변경 해보았다.

 

SELECT main.* FROM auction AS main
	JOIN (
    	SELECT MAX(idx) AS max_idx
        FROM auction WHERE item_id = :item_id
        GROUP BY realm_id, auction_house_id, item_id) AS sub
    ON main.idx = sub.max_idx
    ORDER BY price_min DESC

이렇게 변경 하니 채 1초도 걸리지 않았다. 10~30ms가 소요되었다... 

서브쿼리가 참 최악인가보다.

반응형