일하는데 파트너사가 Delete의 서브쿼리로 IN절을 사용해서 문제가 됐다고 한다.
머리로 생각해봐도 절대 같은 테이블에서 where in 조건을 걸어서 delete를 한다는 것이 말이 안되는데..
상식적으로..Delete 하고 또 Select 하고를 반복하면 속도가 엄청 느리겠지..
MsSQL은 해주긴 하는데 디비 따라 성능이 올라가고 아니고를 떠나서..에바임...☆
SQL 플랜은 Delete 의 IN - 서브쿼리에 있는 쿼리블럭이 모두 DEPENDENT SUBQUERY 타입 으로 수행되고 있으며 그에 따라 당연히 처리 결과가 나오지 않게 되는것 입니다.
DEPENDENT SUBQUERY는 즉 종속적 또는 의존적 서브쿼리로 상위 테이블에 종속적/의존적으로 처리됨을 의미하며, nested loop join 처럼 매 레코드 마다 서브쿼리와 결과를 비교 하게 됩니다.
그래서 self join으로 걸어서 테이블 내 레코드를 셀렉한 서브쿼리 작성 후 delete를 해야한다.
'일하면서 쌓는 지식 > DB' 카테고리의 다른 글
| [MsSQL] 신입 1년동안 SSMS를 쓰면서 저질렀던 실수 (2) | 2021.01.15 |
|---|---|
| [MsSQL] Openquery 로 MariaDB에 Insert 해보기 (2) | 2021.01.14 |