잠시 상황을 설명 드리면
기존 AA 계정에 있던 emp, dept, group 테이블에 있는 데이터를 권한이 있고 없음에 따라 데이터를 분리 했습니다.
권한이 필요한 데이터 같은 경우 같은 테이블 스페이스에 BB 계정을 생성하여 emp, dept, group 테이블과 인덱스를 동일하게 생성하여 BB계정에 테이블로 데이터를 이관 하였습니다.
기존에 SQL이
SELECT *
FROM emp x, dept y, group z
WHERE y.dept_id = x.dept_id
AND z.group_id = x.group_id
이랬을때 권한이 있는 사용자가 데이터 조회시 AA계정에 있는 데이터와 BB계정에 있는 데이터가 동시에 조회가 되야 해
서 UNION ALL로 묶어서 조회를 했습니다.
case1) -------------------------------------
SELECT *
FROM AA.emp x, AA.dept y, AA.group z
WHERE y.dept_id = x.dept_id
AND z.group_id = x.group_id
UNION ALL
SELECT *
FROM BB.emp x, BB.dept y, BB.group z
WHERE y.dept_id = x.dept_id
AND z.group_id = x.group_id
---------------------------------------------
case2) -------------------------------------
SELECT *
FROM (
SELECT * FROM AA.emp
UNION ALL
SELECT * FROM BB.emp
) x,
(
SELECT * FROM AA.dept
UNION ALL
SELECT * FROM BB.dept
) y,
(
SELECT * FROM AA.group
UNION ALL
SELECT * FROM BB.group
) z
WHERE y.dept_id = x.dept_id
AND z.group_id = x.group_id
---------------------------------------------
이렇게 두가지 케이스로 플렌 떠서 비교했을때
case1 같은 경우 한쪽만 조회했을때 보단 약 2배정도 시간과 cost 가 나오더라구요 플렌도 동일하게 풀리고
근데 case2 같은 경우 플렌자체도 다르게 풀리고 시간과 cost도 2배보다 더 나옵니다. 인덱스를 못타는 쿼리도 발생하더라구요
이제부터 질문입니다. 제가 DB를 많이 몰라서 질문이 다소 어의가 없더라도 양해 부탁 드립니다.
질문1) 한쪽을 조회할때보다 양쪽을 조회하면 시간이 약 2배정도 걸리는데 혹시 빨라질수 있는 방법이 있나요??;;;;
(제가 생각했을때는 테이블이 다르기 때문에 물리적인 저장 위치도 달라서 항상 2배씩 걸릴거라 예상하지만 제가모르는 뭔가 있을까 싶어 질문 드립니다.)
질문2) 동시조회를 해야 하는데 case1), case2) 말고 다른 방법이 있을까요???
조언 부탁 드립니다.