본문 바로가기
DB

UNION ALL vs 서브쿼리 .. DB 속도 확인

by DDveloper 2022. 12. 5.

프로젝트라는 폴더가 있는데 해당 부서의 직속임원, CEO의 권한을 갖고 있어도 안보이는 현상이 있어서 에러를 수정하였다.

 

문제 해결을 위해 부서의 직속임원과 CEO, Chairman 을 조회해오는 쿼리를 한번에 짜고 있던 중 

UNION ALL 과 서브쿼리로 하는 것 중 더 효율적인 것으로 진행하려고 속도 측정 후 조금이라도 더 빠른 것으로 반영해봤다.

먼저 DBeaver에서 PostgreSql을 사용하고 있는데 속도 측정하는 명령어 'EXPLAIN ANALYZE' 를 사용하였다

 

1. UNION ALL

SELECT
	컬럼1(이름)
FROM
	acl(테이블2)
WHERE
	id =
(
	SELECT
		id
	FROM
		acl(테이블1)
	WHERE
		그룹명컬럼 = concat('g_', (SELECT 부서구분컬럼 FROM 부서정보테이블 WHERE 부서코드 = #{파라미터}), '_imwon')		
)
UNION ALL
SELECT
	컬럼1(이름)
FROM
	acl(테이블2)
WHERE
	id = 
	(
	SELECT
		id
	FROM
		acl(테이블1)
	WHERE
		그룹명컬럼 = 'g_chairman'
	);

평균 0.5~0.7 정도 나옴

 

2. 서브쿼리

SELECT
	컬럼1
FROM
	acl(테이블1)
WHERE
	id =
(
	SELECT
		id
	FROM
		acl(테이블2)
	WHERE
그룹명컬럼 = concat('g_', (SELECT 부서구별코드 FROM 부서정보테이블 WHERE 부서코드 = #{파라미터}), '_imwon')		
)
OR id =
(
SELECT
		id
FROM
		acl(테이블2)
WHERE
		그룹명컬럼 = 'g_chairman'		
);

평균 0.5 ~ 0.7 정도 나옴

 

속도는 평균적으로 비슷하게 나와서 좀 더 간결해 보이는 서브쿼리를 이용하여 만든 쿼리로 반영을 하였다..

앞으로도 쿼리를 새로 만들 때 혹은 수정할 때 효율과 속도를 좀 더 신경써야겠다.

댓글