우선 서브쿼리란 쿼리안에 또 쿼리를 담는 방법을 말한다.
R1 이라는 원래 테이블로 존재하는 부분과 순번(seq)라던지, max , min 등 쿼리 내부에서 생성되는 부분을
결합하는 방법을 이용하는데
이러한 방식은 쿼리를 통해 많은 구분을 짓고 , 데이터를 간편하게 가공할수 있지만, 두가지 단점이 있습니다.
1. 코드가 복잡해서 읽기 어렵다
2. 성능에 문제가 생긴다.
>서브쿼리는 대부분 일시적인 영역(메모리 또는 디스크)에 확보되므로 오버헤드가 생긴다.
>서브쿼리는 인덱스 또는 제약정보를 가지지 않기 때문에 최적화 되지 못한다.
>두개의 쿼리에 결합을 필요로 하기때문에 비용이 높고 실행 계획이 변동될 리스크가 발생한다.
>기본 테이블에 대한 스캔이 두번 필요하다.
다음과 같이 성능적인 문제가 4가지가 있는데, 그중 기본테이블에 대한 두 번의 스캔은 윈도우 함수(오라클에는 있고 Mysql은 사용자가 정의해서 써야함) 을 이용하는것이 I/O를 줄일 수 있는 가장 좋은 방법이다.
'개발 > MySQL' 카테고리의 다른 글
[SQL] 정규화란? (0) | 2021.04.06 |
---|---|
[SQL] 인덱스란? (0) | 2021.03.31 |
[MYSQL] 테이블 생성시 기본키, 복합키, UNIQUE (0) | 2021.03.29 |
[MYSQL] 5분간격의 데이터를 id와 timetable로 구분짓기 (0) | 2020.09.08 |
[MySQL] 6강. Select / Insert / Delete (0) | 2020.09.02 |