쿼리튜닝 조인순서 질문 0 4 3,621

by 유니 [Oracle Tuning] [2023.12.06 13:45:50]


TABLE_A - 109790 row 

TABLE_B - 110209 row

TALBE_C - 2541 row

TABLE_D - 12927 row

TABLE_E - 8119 row

TABLE_F - 7206 row

TABLE_G - 19 row

TABLE_H - 7 row

TABLE_I - 17 row

인 상황에 현재 

------인덱스 컬럼 -------

A.EMPSEQ = B.EMPSEQ

A.EMPCD = C.EMPCD

C.EMPCD = D.EMPCD

C.EMPCD = E.EMPCD

C.EMPCD = F.EMPCD(+)

-------------------------

------인덱스 아닌 컬럼------

C.DIVCD = A.DIVCD

G.COMCD = A.DIVCD

H.COMCD = F.KINDCD

I.COMCD = F.AREACD

--------------------------

의 조인이 걸려있는상태입니다. 쿼리 튜닝이 처음인 초급개발자라 구루비에 있는 글 참고해서 

기존 테이블 조회시 성능이 매우 떨어지는 부분들은 단일 테이블 조회시 0.1초대로 맞추어놓았습니다.

질문이 2개가 있는데 

1. 해당 조인을 어떤 순서로 구성하는게 가장 효율적일지 궁금합니다. 그리고 LEADING 힌트를 사용하는 방식도 궁금합니다.

2. LIST를 불러오는 쿼리는 현재 15분이 지나도 실행되지않다가 DB가 뻗는 상황이였다가 15~20초로 줄였습니다. 하지만 ROW_NUMBER() OVER( ORDER BY 1,2,3,4) <- 

정렬을 하는순간 성능이 급격하게 저하되는 상황입니다. 소트가 성능저하의 원인이라는건 알겠는데 이럴땐 보통 어떤부분이 문제인지 궁금합니다.

실행계획을 올려드리고싶은데 올리지못하는점 죄송합니다ㅠㅠ 

by 아발란체 [2023.12.08 08:50:36]

데이터가 별로 없는 상황에 다 등치 조건인데, 너무 오래 걸리네요. 혹 최종 얻는 결과 건수는 어떻게 되나요?
OLPT 환경(최종 50건 이하 출력)이라면 데이터를 조회하는 것이라면 힌트는 도움이 안될 거 같고
인라인뷰(=FROM절 서브쿼리)를 통해 선행 집합을 줄이고 조인하는 것이 효율이 좋을 것 같은데.. 
그리고 실행계획은 보안하고 상관이 없을 거 같은데 ... 헤헤헤헷 = ㅁ =)/ 


by 구루유니 [2023.12.08 09:06:32]

최종 얻는 건수는 3만건 정도입니다! 복사가 안돼서 실행계획을 못올리겠네요ㅠㅠ선행집합을 좀 줄여봐야겠네요


by 아발란체 [2023.12.08 09:55:58]

스크린샷 안되나영?
보안이 높은 곳이라면 스크린샷 방지 솔루션에.. 휴대폰 카메라 보안 스티커....  OTL

아님 각 테이블마다, 특히 데이타 많은 A, B 테이블
개별 조회를 할 때 동일한 조건 값을 넣어 조회하면 속도 문제는 없을 거 같습니다.

실시간으로 3만건 이상 조회 발생이 많다면 ... 음..
서버 하드웨어적 환경 문제 검토 / 결과셋이 3만건이면 OLTP(온라인 트렌젝션) 환경이 아닌 거 같아요
3만건이 면 적지 않은데 램이 딸리거나 I/O 성능이 딸리거나..

원래 데이타는 3만건이 되지 않는데 조인하며 카티전곱(Cartesian product)으로 데이타가 곱하기 되었고 일단 출력 건수도 적지 않은데 항목수나 항목 내용까지 많다면(=물리적 접근 많아짐) 느릴 수 밖에 없을 거 같아용

카티전곱이기 때문에 코드성 조회가 많다면 스칼라서브쿼리를 이용하여 탐색한 데이터는 또 읽지않고 메모리에 있는 것을 쓰도록 서브쿼리를 이용하는 것도 효율이 발생할 거 같아용 

아무튼  DB툴에서 페이징 처리해서 초단위로 떨어진다면 많은 데이터를 출력할 때 속도 문제로 보여용


by 구루유니 [2023.12.08 15:25:56]

필수조건을 걸던지 해야될거같네요 이번 기회로 select,insert,update,delete만 하던 제게 많은 공부가 된거같습니다ㅠㅠ정말 감사합니다 아발란체님! 구루비 보면서 공부 많이하겠습니다 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입