프로젝트라는 폴더가 있는데 해당 부서의 직속임원, 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'
);

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'
);

속도는 평균적으로 비슷하게 나와서 좀 더 간결해 보이는 서브쿼리를 이용하여 만든 쿼리로 반영을 하였다..
앞으로도 쿼리를 새로 만들 때 혹은 수정할 때 효율과 속도를 좀 더 신경써야겠다.
'DB' 카테고리의 다른 글
| [postgreSql]DB Table lock 테이블 락 걸렸을 때 확인 및 킬(kill) (0) | 2022.11.11 |
|---|
댓글