동적인 뷰(?)와 같은 효율적인 방법이 있을까요? 0 3 3,454

by 까망소 [PL/SQL] Dynamic sql [2013.07.10 09:02:24]


년월 집계 테이블의 데이터가 너무 많고 사용자가 많아서 조회속도 저하도 심하여
년도별 집계 테이블을 생성하고 년월 조건에 따라 이 두 테이블을 조인하여 데이터를 조회하고 싶습니다.
※년도별로 집계하면서 몇 개의 불필요한 Key들을 제거하여 년월 대비 10% 이하 수준으로 데이터가 집계되었습니다.

① 동적인? view로 구현하고 싶습니다.

② view로 구현이 어렵다 하더라도 오라클 오브젝트를 이용하여 하나의 뷰나 테이블처럼 사용하고 싶습니다.
  └ '[강정식의 오라클 이야기]Dynamic SQL 사용방법'을 응용하여 function 을 생성하여 사용해 보았습니다만...
   정의한 레코드 타입에 6백만건 정도의 데이터를 담아와서 그런건지 단순 조회는 빠르지만
   가져온 데이터에 조건을 주면 인덱스가 없어서 그런건지 조회가 안 된다고 느낄정도로 느립니다.

    예) select * from table(tmp_funtion('201101', '201301')) 

고견 부탁드립니다. *^ㅡ^)/



※최초의 생각은 아래와 같이 년월 범위로 데이터를 가져온 후 제품번호, 색상 등의 질의를 하려 합니다.
지금 사용하고 있는 리포트 등의 쿼리 수정을 최소화하는 방향으로 커스터마이징을 하려 함입니다. ^^:

테이블 t1

년월, 수량

테이블 t2 = 테이블 t1의 년도별 집계테이블

년도, 수량

위와 같이 2개의 테이블 t1과 t2가 있습니다.

t1 의 데이터는 2000년 1월~2013년 7월

t2 의 데이터는 2000년 ~2013년

t1과 t2를 join하여 view t3를 정의하였을 때


아래의 예1), 예2), 예3) 의 질의절로 데이터를 조회할 경우에 대응할 수 있었으면 합니다.

t2 의 년도별 집계를 조인하여 성능을 향상하기 위함입니다.


예1)

where 년월 < '201306'


예2)

where 년월 between '200904' and '201206'


예3)

where 년월 > '201102'

by 아발란체 [2013.07.10 09:24:52]

각 테이블 건수가 어떻게 되나용? @.@)?

아 그리고 이건 다른 얘기인데,
과거 데이타는 변동이 없고 자주 쓰는 집계가 정해져 있다면
따로 중간 집계 테이블을 두고 과거 집계를 미리 저장하고 있다가
최근 데이타만 집계하여 중간 집계와 합하여 보여주는 것도 방법이 될 것 같습니다.
아님 파티셔닝도 고려해 볼 수 있을 것 같습니다.

물론 근본적으로 최적화는 하는 것이 좋겠죠.


by 까망소 [2013.07.10 11:04:52]

아발란체님 답변주셔서 감사합니다.

t1테이블은 43백만건이고, t2는 7백만건입니다.

고정적인 중간집계 테이블로의 활용을 위해 년도별 집계하여 t2를 도출하였는데요.
말씀해주신대로 t1과 t2를 합하여 보여줄 수 있지만
합한 결과를 t3라는 오라클 오브젝트(뷰,또는 함수) 하나로 가져와서 구현하려 합니다.
프로그램에서는 테이블명만 변경하는 걸로 최적화 하려 하기에 고민이 생겼습니다.

파티셔닝은 데이터 분포상으로는 적합하지만 6년치 데이터를 조회하는 경우가 빈번하기에
퍼포먼스에 대한 확신이 없기도 하여 보류중입니다.


by 아발란체 [2013.07.10 11:53:51]
"인덱스가 없어서 그런건지"라는 말씀이 있던데 인덱스가 없나요?
그럼 인덱스를 주면 안 되나요? @.@)

말씀 주신 건수로 봤을 때 많은 건수는 아니고
보여주는 결과가 집계 성격이라 천건이 넘지 않을 것 같고
인덱스만 잘 잡아도 아주 빠르게 보일 것 같은데...
다른 뭔가가 있는 것 같기도 하고...
다이나믹은 몇 가지 단서를 가지고 와서 조인 없이 조회를 했을 때 의미가 있을 것 같은데
이런 상황은 아닌 것 같고..

테이블 스크립트와 작성하신 질의 올려주시면 정확하게 문제를 확인 할 수 있을 것 같습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입