20억건이 넘들 Big 테이블을 코드 컬럼별로
SELECT 코드1,COUNT(*) FROM Big_Table
GROUP BY 코드1
SQL돌려서 결과를 내야 합니다.
그런데 한 테이블에 코드1,코드2....N개의 컬럼이 존재 합니다.
그러다 보니 Big 테이블을 여러번 SELECT 해서 시간도 오래 걸립니다.
테이블을 1번만 읽어서 N개의 코드 컬럼의 결과를 위 같은 내용으로 구 할수 있는지 고수님들이 지도 부탁 드립니다.
참고로 DB는 오라클 11g 이며 주기적으로 30여 개의 BIG TABLE을 위와 같은 방법으로 오랜 시간이 걸려 작업 중 입니다.
UNPIVOT 을 이용하면 한번에 집계 가능합니다.
다만, 대용량에서 속도가 나올지는 모르겠네요.
WITH t AS ( SELECT '1' cd1, 'A' cd2, 'a' cd3 FROM dual UNION ALL SELECT '1', 'A', 'a' FROM dual UNION ALL SELECT '1', 'B', 'a' FROM dual UNION ALL SELECT '2', 'B', 'a' FROM dual UNION ALL SELECT '2', 'B', 'b' FROM dual UNION ALL SELECT '2', 'C', 'b' FROM dual UNION ALL SELECT '3', 'C', 'b' FROM dual UNION ALL SELECT '3', 'C', 'c' FROM dual UNION ALL SELECT '3', 'C', 'c' FROM dual ) SELECT gb , cd , COUNT(*) cnt FROM t UNPIVOT (cd FOR gb IN (cd1, cd2, cd3)) GROUP BY gb, cd ORDER BY gb, cd ;