튜닝시 코스트에 관련된 질문입니다. 0 4 1,514

by 물통20병 [Oracle Tuning] 튜닝 [2017.11.15 17:58:48]


DB 튜닝을 연습하고 있는 상황입니다.

튜닝을 하다가 궁금한 점이 있어 질문을 드립니다.

튜닝을 할 때 Full Table Scan시 Io Cost가 29인 테이블이 있습니다.

그리고 이 Table에 where절에 IN 방식으로 index를 태우면 코스트가 3이 되는데

결과를 출력하는 경우 IN 방식으로 인덱스가 태운 방식이 결과 값이 느립니다(10초 정도느림).

IN 안에 3개의 인자가 들어가는데 선택도는 높은 편입니다.

제가 궁금한 점은 튜닝 전후로 Io Cost의 크기가 그리 크지 않은 경우 그냥 Full Table Scan을 하는 경우가 속도 측면에서 유리한경우가 있나요??

이런 경우 어떤식으로 생각을 해서 튜닝을 해야하나요??

by 마농 [2017.11.15 18:55:41]

선택도가 높은데 인덱스 탈 때 10초나 더 걸린다구요? 그럴리가 있을까요?
혹시 테이블이 하나가 아니고, 쿼리도 in 조건만이 아닌 복잡한 쿼리 아닌가요?
선택도가 높더라도 절대량이 많으면 램덤엑세스가 느릴수는 있겠네요.


by jkson [2017.11.15 19:24:35]

선택도의 개념부터 정리하죠.

말씀하신 선택도의 개념이 해당 컬럼 전체 데이터에서 inlist의 3가지 value의 데이터 비율이라고 한다면

선택도가 높다 -> 전체 데이터중 3가지 value로 선택되는 비율이 크다.

이 말인즉.. 선택도가 높을 때 인덱스를 사용하면 랜덤엑세스가 많이 발생한다.

랜덤엑세스가 많이 발생하면 경우에 따라 풀스캔보다 느리다.

따라서 느려질 수 있습니다. 이런 의미로 선택도가 높다고 하셨다면.. 옵티마이져가

실행계획을 잘못 잡은 거죠. 통계정보가 이상하다든지..

다른 의미로 선택도를 말씀하셨다면..

distinct value / 전체 row수

이럴 경우에는 선택도가 높다 -> select 되는 row수가 적다 -> 인덱스 스캔이 빠르다..

아무래도 첫 번재 의도로 선택도가 높다고 하신 게 아닌가 싶습니다.


by 물통20병 [2017.11.16 10:33:54]

자세한 개념 정리 감사합니다.

선택도를 설명한 방식 중 전자의 의미가 제가 생각하는 선택도 였습니다.


by 마농 [2017.11.16 10:50:26]

많은 데이터 중에 적은 데이터 검색할 때 인덱스 스캔이 유리합니다.
많은 데이터를 검색할 때는 인덱스 스캔이 불리합니다.

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