A라는 테이블을 key값으로 조회.
A라는 테이블의 작성자 및 수정자의 이름 및 정보를 가져오기 위해서 B라는 테이블을 조인해야 합니다.
a)
SELECT
(SELECT name FROM B WHERE ID = AA.작성자아이디) AS 작성자이름,
(SELECT email FROM B WHERE ID = AA.작성자아이디) AS 작성자이메일,
(SELECT name FROM B WHERE ID = AA.수정자아이디) AS 수정자이름,
(SELECT email FROM B WHERE ID = AA.수정자아이디) AS 수정자이메일
FROM A AS AA WITH (NOLOCK)
WHERE A.KEY = @KEY
b)
SELECT *
FROM A AS AA WITH (NOLOCK)
INNER JOIN B AS BB WITH (NOLOCK) // 작성자를 위한 조인
ON AA.ID = BB.ID
INNER JOIN B AS BBB WITH (NOLOCK) // 수정자를 위한 조인
ON AA.ID = BBB.ID
WHERE A.KEY = @KEY
2가지 방법 중, 효율적인 방법은 무엇일까요.
지금은 작성자/수정자만 조회를 하지만, 이게 작성자/수정자/예약자 등등등 점점 늘어날수가 있습니다.
(쿼리는 임의로 작성하게 틀린 부분이 있을수도 있습니다.)
보통 조인이 유리합니다.
다량의 자료에서 중복 자료가 많은 경우 서브쿼리 캐싱 효과가 있어서 스칼라서브쿼리가 유리할수도 있습니다.
중복되는 자료가 적다면? 캐싱효과가 없어 오히려 스칼라서브쿼리가 느립니다.
(Oracle 기준 설명. MSSQL 도 서브쿼리 캐싱 기능이 있는지는 모르겠네요.)
a) 스타일은 B 테이블을 4번 사용하고,
b) 스타일은 B 테이블을 2번 사용하네요.
위와 같이 소량의 자료 검색인 경우라면?
서브쿼리 캐싱 효과도 없고, 테이블을 더 많이 사용하는 a) 스타일은 좋지 않습니다.
다만, 워낙 (키로 1건 검색하는?) 소량이라? 큰 성능 차이는 느끼지 못할 듯 하네요.