본문 바로가기

개발/MySQL

[Mysql] 서브쿼리 사용법과 한계

우선 서브쿼리란 쿼리안에 또 쿼리를 담는 방법을 말한다.

R1 이라는 원래 테이블로 존재하는 부분과 순번(seq)라던지, max , min 등 쿼리 내부에서 생성되는 부분을 

결합하는 방법을 이용하는데 

이러한 방식은 쿼리를 통해 많은 구분을 짓고 , 데이터를 간편하게 가공할수 있지만, 두가지 단점이 있습니다.

 

1. 코드가 복잡해서 읽기 어렵다

2. 성능에 문제가 생긴다. 

  >서브쿼리는 대부분 일시적인 영역(메모리 또는 디스크)에 확보되므로 오버헤드가 생긴다.

  >서브쿼리는 인덱스 또는 제약정보를 가지지 않기 때문에 최적화 되지 못한다.

  >두개의 쿼리에 결합을 필요로 하기때문에 비용이 높고 실행 계획이 변동될 리스크가 발생한다.

  >기본 테이블에 대한 스캔이 두번 필요하다.

 

다음과 같이 성능적인 문제가 4가지가 있는데, 그중 기본테이블에 대한 두 번의 스캔은 윈도우 함수(오라클에는 있고 Mysql은 사용자가 정의해서 써야함) 을 이용하는것이 I/O를 줄일 수 있는 가장 좋은 방법이다.