빼햄
155
2019-11-07 18:34:26 작성 2019-11-07 18:35:31 수정됨
1
124

db 쿼리 처리 의견 부탁드립니다


안녕하세요, 고수님들. 1년차 신입입니다.

그동안 몇 만 row 되는 데이터밖에 다루지 않았다가, 이번에 천 만 ~ 억 단위의 row가 있는 데이터를 사용하게 되었습니다. 현재 인덱스를 사용하고 있어 서브쿼리 내 select(projection) 부분은 순식간에 몇 백 만 row를 가져올 수 있습니다.

특정 row들을 가져온 후 집계함수를 사용하여야 하는데, 집계함수 처리 cost가 너무 많이 듭니다.

알아보니 집계함수는 row에 따라 cost가 많이 든다고 합니다.

이 문제를 쿼리 내에서 조정하여 해결이 가능한건지, 아니면 집계된 결과를 따로 가지고 있는 테이블을 하나 만들어야 할지 고민입니다.

쿼리 내에서 조정 가능하다면 좋겠지만, 그게 아니라면 언제까지 집계할 때마다 몇 십 초나 걸리는 쿼리를 날려 서비스 할 수 없으니까 말이죠.

혹 쿼리로 처리 가능한 부분이라면 의견 부탁드리고,

조회용 테이블을 따로 만드려는 생각에 대해서도 의견 부탁드립니다.

감사합니다.

0
0
  • 답변 1

  • 바카디F
    1k
    2019-11-09 12:11:29 작성 2019-11-09 12:14:39 수정됨

    "1년차 신입입니다."


    1년 신입이신데 이 문제를 고민하는건

    개인적인 호기심인가요?

     아니면 프로젝트에서 지원을 안해줘서인가요?

    DA가 고민해야할 문제이나 현실이 안그렇긴 하죠...


    1. 정규화가 잘되어있다면 테이블의 물리적인 구조조정을(파티션)

    더해서 쿼리로 해결 할 수 있습니다 

    하지만, 대부분 정규화가 안되어있죠.

    왜 중요한지 아는 사람도 거의 없고요(공공SI기준)

    현실적으로 불가능 


    2. 인덱스를 떡칠하는걸로 가능 할 수 있습니다.

    미래의 성능을 보장할 수 없고, 동시에 같이 사용되는 다른 업무 쿼리에게 영향을 주거나 받을 수 있습니다.

    (통상적으로 이런 식으로 해결하려는 경향이 큼)


    3. 집계 테이블이 그나마 가장 현실적인 대처 방법이죠

    과거업무 집계는 배치나 MVIEW를 통해 만들고

    최근 집계는 실테이블에서 조회하고요.


    4. 어떤 곳은 OLTP와 집계 조회용 DBMS로 나눠서 (각각 오라클과 오라클 엑사데이터)

    OGG 를 통해 데이터를 동기화하고

    집계 조회를 하는 형식을 사용하기도 합니다.


    1
  • 로그인을 하시면 답변을 등록할 수 있습니다.