본문 바로가기
일하면서 쌓는 지식/DB

Delete시 SubQuery 사용

일하는데 파트너사가 Delete의 서브쿼리로 IN절을 사용해서 문제가 됐다고 한다.

머리로 생각해봐도 절대 같은 테이블에서 where in 조건을 걸어서 delete를 한다는 것이 말이 안되는데..

상식적으로..Delete 하고 또 Select 하고를 반복하면 속도가 엄청 느리겠지..

MsSQL은 해주긴 하는데 디비 따라 성능이 올라가고 아니고를 떠나서..에바임...☆

 


SQL 플랜은 Delete 의 IN - 서브쿼리에 있는 쿼리블럭이 모두 DEPENDENT SUBQUERY 타입 으로 수행되고 있으며 그에 따라 당연히 처리 결과가 나오지 않게 되는것 입니다.

DEPENDENT SUBQUERY는 즉 종속적 또는 의존적 서브쿼리로 상위 테이블에 종속적/의존적으로 처리됨을 의미하며, nested loop join 처럼 매 레코드 마다 서브쿼리와 결과를 비교 하게 됩니다.

그래서 self join으로 걸어서 테이블 내 레코드를 셀렉한 서브쿼리 작성 후 delete를 해야한다.