오라클 조회시 컬럼과 블럭의관계 0 4 1,923

by 이기락 [Oracle Tuning] 블럭 컬럼 select [2018.03.29 07:04:34]


오라클에서 select를 할 경우 해당 테이블의

컬럼이 많은경우 

Select문에 기술한 컬럼 개수에 따라

읽어 들이는 블럭의 수가 달라 지나요?

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

다시 말하자면

일단 오라클에서 조회를 할때

디스크에서 블럭단위로 데이터를 읽어 들이는걸로 알고 있는데요

 

컬럼의 길이를 모두 합한 경우

두블럭 이상이 됫다고 가정한다면

Select문에 단 하나의 컬럼만

기술 하고 rownum <2 한 경우

오라클은 한블럭만 읽나요?

아니면 한로우 전체를 읽기위해

두블럭 이상을 읽어 들이나요?

 

이것에 따라 대용량의 데이터를 읽어 들일때

컬럼을 기술 하느냐 마느냐가

디스크 i/o 측면에서 튜닝에 중요한 요소가

될것 같습니다만^^

여기저기 찾아봐도

자료를 찾기가 쉽지가 안네요^^

 

아시는분 간단하게나마

답변 좀 부탁 드리고요

관련 자료를 어디서 찾아보면 될지 힌트라도

좀 부탁 드립니다^^

by 임상준 [2018.03.29 08:30:59]

row 단위 IO 이기 때문에 두블럭을 읽습니다.


by 마농 [2018.03.29 08:45:20]

Disk I/O 관점으로 보면 블럭단위로 읽기 때문에 필요한 컬럼만 기술해도 모든 블럭을 읽습니다.
다만 그렇다고 해서 * 를 사용하는게 좋은 건 아니죠. 필요한 컬럼만 기술하는것을 권장합니다.
해당 컬럼이 인덱스 컬럼이라면? 인덱스만 읽고 끝날 수 있구요.
정렬 쿼리라면? 정렬 공간을 덜 사용하게 되구요.
해시 조인이라면? 해시맵 공간을 덜 차지할 것이고
I/O 관점이 아닌 데이터 전송량 관점에서 보면 전송량이 줄겠네요.
* 쓰는 것보다 I/O 성능이 좋아지지도 않고 일일이 적기가 불편하다구요?
필요한 컬럼만 기술하는 것이 코딩 약간 불편한거 빼고는 나쁠게 하나도 없습니다.


by 신이만든지기 [2018.03.29 10:21:29]

부연설명을 하자면,

* 로 데이터를 가져오는 경우와 필요한 컬럼만 가져오는 경우 네트워크 트래픽양이 달라집니다.

고속도로 폭(대여폭)은 일정한데, 차(데이터)를 얼마나 가지고 나오느냐의 차이입니다.

차(데이터)를 많이 끌고 나올수록 정체가 심해지는 것은 당연하겠죠.


by 이기락 [2018.03.29 17:20:42]

다들 답변 고맙습니다

많은 도움 됬습니다^^

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