본문 바로가기

SQL

SQL : 서브쿼리 사용 주의점

 

서브쿼리란 하나의 SQL문에 포함되어있는 또 다른 SQL문을 말한다.

예를 들어, 어떤 사람의 주소정보를 알고 싶을 때는

Select *

From Address

Where City_Name =  (Select  City_Name From User Where User_Name ='김이박');

이런식으로 말이다.

SQL작성할 때 거의 모든 부분에 서브쿼리를 사용할 수 있는데 사용 시 주의점이 있다 (특히 Select문에서)

 

 

아까 예시쿼리를 응용하여

Select
ut.userName as userName
ut.id as id
ut.phoneNumber as phoneNumber
ut.departmentCode as departmentCode
 ( 	
 	Select 
    departmentName 
	From
    departmentTable
    Where 
    departmentCd = ut.departmentCd
) as departmentName
    
From
UserTable ut

( 들여쓰기 왜저럼,, 수정 귀찮,, 패스)

이런 쿼리문이 있다고 가정할 때,

만약 해당 쿼리의 결과 row수가 10만개라면, departmentName을 불러오는 서브쿼리도 10만번을 수행한다.

 

게다가 서브쿼리의 속도도 100밀리초 단위라면, 이게 쿼리를 하는건지 죽은건지 모르는 상황이 올 수도 있다.

 

그래서 select 절의 서브쿼리는 수행시간이 짧게 떠줄수록 좋다.

실무에서는 만단위 쿼리결과는 우습기 때문에 쿼리속도저하의 1등공신이다.

대용량쿼리라면 서브쿼리를 가급적 피하고 적당히 join이나 그 외 방법을 통해 회피해야 한다.