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 을 이용하면 한번에 집계 가능합니다.
다만, 대용량에서 속도가 나올지는 모르겠네요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 ; |