튜닝 아우터 테이블과 이너테이블에 관하여 질문드립니다. 0 2 548

by 티라미수꿀맛 [Oracle Tuning] [2020.08.02 19:44:48]


안녕하세요

저는 튜닝공부를 하고 있는 학생입니다.

책을 보던 도중 한가지 의문점이 생겨 고수님들께 도움을 청하고자 이렇게 질문 드립니다.

OLTP성 쿼리로 NL 조인시  로우수를 보고 

적은거를 드라이빙 즉, 아우터테이블로 선정한다  그래야지 처음에 범위를 줄여서 효율적이다 
이렇게 생각하고 있었는데요

책을보니 아우터테이블은 매커니즘상 비효율이 한번에 그치지만 , 이너테이블 쪽은 굉장히 중요하기때문에
인덱스를 잘 선정해야한다 이렇게 써있거든요 ??
-> 그래서 결과적으로 아우터테이블에도 인덱스 선정을 잘해야 하나 , 어차피 로우수 적은걸 드라이빙 시키면 
줄어드니 상관 없지만 그걸 토대로 이너테이블과 조인을 하기때문에 이너테이블은 인덱스 선정이 매우매우 크리티컬하게 중요하다
라고 생각을 하였습니다.

이렇게 생각하는게 옳은건지 잘 모르겠네요 . 
이해력이 많이 부족하여 두서없는 질문 올렸는데 답변 해주시면 감사하겠습니다.

P.S 배경지식이 너무나도 없어서 눈높이를 많이 낮추고 설명해주시면 감사하겠습니다 ㅠ.ㅠ

감사합니다.
 

by 우리집아찌 [2020.08.03 09:50:46]

아마 책에 설명이 더 자세히 되있을거라 생각되는데요.

제가 보기엔.

OUTER JOIN 자체가 드라이브 테이블을 강제로 설정되기 때문에  드리븐 테이블의 인덱스가 중요합니다. ( 드라이브 테이블 ROW 하나 읽을때 드리븐 테이블의 ROW 를 경우에 따라 많은수의 데이터를 억세스 할수 있으니 INDEX가 없으면 비효율이 발생하겠죠)  

INNER JOIN은 어느 테이블이 드라이브 테이블이 될지 알수가 없기에 ( 옵티마이저가 판단합니다 ) 인덱스 설정에 더 주의가 필요하다는 말인듯합니다. 


by 마농 [2020.08.03 10:02:29]

개념상 맞게 판단하고 계신 듯 합니다.
NL 조인의 후행테이블(이너 테이블) 에 인덱스가 없다면?
선행테이블(아우터 테이블) 건수만큼 이너테이블을 반복하여 풀스캔 하게 됩니다.
다만. 이게 이너가 아우터보다 더 중요하다는 식으로 단정지으면 안된디고 생각됩니다.
이게 특정 경우에 한해서 하는 설명인데... 이를 다른 경우에도 일반화 시킬 여지가 있기 때문입니다.
둘 다 중요하다고 생각하시는게 좋을 듯 합니다.

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