Community

✔️ with절(CTE)와 서브쿼리의 차이

저는 일을 할 때 with절(a.k.a CTE, Common Table Expression)을 사용해서 임시테이블을 만들어 많이 사용합니다. 제가 원하는 임시테이블의 이름도 붙이고 붙였다 뗐다 사용하지요! 그런데 레거시 코드를 살펴보다 보면(그리고 레퍼런스 코드를 서칭하다보면) from 절 뒤에 ()로 감싸진 서브쿼리를 사용하는 경우를 무수히 많이 볼 수 있습니다. 개인적으로는 서브쿼리가 꼬리에 꼬리를 물고 이어지면 가독성이 떨어져서 파악하기가 쉽지 않더라구요(러시아 인형처럼…) 그래서 CTE와 서브쿼리의 성능 관점에서 차이를 찾아봤는데, 잘 정리된 블로그 글이 있어서 공유드립니다! 결론적으로 “재사용을 하는 서브쿼리라면 with절(CTE)가 더 좋다!”라고 할 수 있을 것 같네요. 그 이유는 - CTE는 버퍼캐시에 풀 스캔하여 기록되기 때문에 여러번 반복되어 참조될 때 효율적이다. - CTE는 서브쿼리의 팩토링 방식 역할을 한다. 개인적으로는 아래와 같은 결론을 내렸습니다. - 실무에서는 CTE를 쓰는 것이 가독성 + 재사용 효율 측면에서 좋다! - 한 번만 쓰이는 서브쿼리라면 from () 형태의 서브쿼리가 좋을 것 같다! 크게 CTE와 성능에서 차이는 없지만 몇 byte라도 메모리를 줄이기 위하여…! 이런 사항들을 기억하고 있다면 실무에서 뿐만 아니라, 코딩테스트를 준비할 때에도 좋은 지식이 될 것 같습니다 🙂

알림

알림이 없습니다