인프런 커뮤니티 질문&답변

데자르님의 프로필 이미지
데자르

작성한 질문수

Real MySQL 시즌 1 - Part 1

LATEAL 사용 관련 질문

작성

·

359

0

안녕하세요. 현재 강의를 수강중인 학생입니다. RATERAL 사용 관련되어 질문이 있어 글 남겨드립니다.

 

잘못된 지식일 수 있지만, 서브쿼리를 사용하면 DBMS에서 지원하는 최적화를 지원받지 못해 서브쿼리를 사용하는 것보다는 최대한 조인을 사용하거나 차라리 쿼리를 나눠서 사용하는 것을 권장한다고 알고 있었습니다. 그런데 해당 강의를 수강하고 LATERAL의 사용을 적극 권장하셔서 제가 알고 있는 지식과 충돌하는 것 같습니다

 

혹시 어떤 경우에 LATERAL을 사용 하는 것이 좋을 지 여쭤보고자 글을 작성합니다.

감사합니다.

 

답변 2

0

백은빈님의 프로필 이미지
백은빈
지식공유자

안녕하세요. 답변이 늦었습니다.

일단 질문 주신 내용으로 미루어보았을 때, 일반 서브쿼리와 Lateral Derived Table을 동일한 서브쿼리 형태로 인지하고 계신 것 같은 느낌을 받았는데요.

일반 서브쿼리와 Lateral Derived Table은 사용 형태과 처리 방식이 완전히 다릅니다. 특히나 Lateral Dervied Table은 조인 형태로도 사용할 수 있고, 이로 인해 일반 서브쿼리 보다 유연한 쿼리 작성이 가능하고 DB 내부적으로도 좀 더 최적화된 형태로 처리될 수 있습니다. 그래서 제 개인적으로는 언급해주신 권장 사항들이 어떤 경우든 항상 옳다고 볼 수는 없을 것 같아요.

Lateral을 사용하면 좋은 대표적인 경우들에 대해서는 제가 강의에 언급해둔 터라, 강의에 나와있는 예시들을 참고해주시면 좋을 것 같습니다.

혹시 추가로 더 궁금한 부분 있으면 다시 말씀해주세요!

감사합니다.

 

0

안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 대해 답변드리겠습니다.

LATERAL을 사용하는 경우는 주로 서브쿼리 내에서 바깥 쿼리의 컬럼을 참조해야 할 때 유용합니다. 기존에는 서브쿼리에서는 바깥 쪽 쿼리의 컬럼을 참조할 수 없었지만, LATERAL 키워드를 사용하면 이러한 한계를 극복할 수 있습니다. 이는 복잡한 조인 상황이나 동적으로 조인 대상이 결정되어야 하는 경우에 매우 효율적인 쿼리를 작성할 수 있게 해줍니다.

예를 들어, 한 테이블의 각 행마다 최근 특정 기간 동안의 통계를 가져와야 하는 경우, LATERAL을 사용하는 JOIN 쿼리를 작성하면 각 행마다 조건에 맞는 서브쿼리 결과를 효율적으로 가져올 수 있습니다. 이는 서브쿼리를 사용할 때보다 성능적인 이점을 제공할 수 있습니다.

다만, LATERAL을 사용하면 쿼리의 복잡도가 증가할 수 있으므로, 사용 전에는 해당 DBMS에서 LATERAL에 대한 지원 및 최적화 정도를 검토하고, 실제 성능 테스트를 통해 기존 방식 대비 성능 개선이 있는지 확인하는 것이 좋습니다.

따라서, LATERAL 사용의 최대 장점은 특정 상황에서 보다 유연하고 효율적인 쿼리를 가능하게 한다는 점입니다. 주로 서브쿼리와 조인을 복잡하게 사용해야 하는 상황에서 성능 개선을 목적으로 고려해볼 수 있습니다.

학습에 도움이 되었길 바랍니다.

데자르님의 프로필 이미지
데자르

작성한 질문수

질문하기