처음에 질문을 잘못이해했네요.
EMP 테이블 FULLSCAN의 경우 버퍼피닝 효과보다도
94블럭 안에 14000 row가 전부 존재했다고 보는 게 맞지 않을까요?
인덱스의 경우는 정렬된 형태로 저장되지만 테이블의 경우 정렬과 상관없이 저장되잖아요.
여기서는 버퍼피닝이 거의 안 일어난 것을 알 수 있는 게
dept 인덱스에 접근한 걸 보면 14000row를 접근하는데 14004 블럭을 접근했죠.
sort가 안 되어있는 테이블(emp)을 접근해서 인덱스(dept_pk)로 다시 접근했을 때 이전 row에 있던 deptno
와 불일치했기에 계속 새로운 인덱스 블록에 접근한 거죠.
만약 테이블(emp)이 deptno순으로 정렬되어있었다면 dept_pk 인덱스 접근시 버퍼피닝이 일어나면서
cr이 많이 줄었겠죠.
답변 감사 드립니다..ㅎㅎ ^^
아 제가 잘못 알고 있는지 모르겠는데요 버퍼피닝은 연속적으로 같은 블럭에 접근을 하면 자동으로
락이 걸리는 형태로 알고있는데. 이엠피 테이블 94 블럭 안에서 14000로우를 가져오는데
1블럭에 있는데이터를 여러번 접근 하지 않고 한번에 꺼내 왔다면 버퍼피닝은 발생하지 않았을 것이고
1블럭에 있는 데이터를 연속적으로 여러번 접근해서 데이터를 가져왔다면 버퍼피닝은 발생 했을것 이라고 추정을 했는
데요
아웃터 테이블일 경우에 블럭에 있는데이터를 한번에 꺼내오나요?
인어 테이블일 경우 아웃터 데이터의 한로우씩 가져와서 맞는데이터인지 확인해야 하기때문에
연속적으로 접근하는 방식 일것같은데.. 제 생각이 맞는지 ^^ 지나가는길에 보시면 답변 부탁드려요 ㅎㅎ
제가 말씀드린 건 inner/outer 차이가 아니라
emp 한 줄을 읽고 하나의 블럭에 접근하는 dept_pk의 경우 이전에 읽었던 블럭을 다시 읽을 때 버퍼피닝이 발생하는데
emp 테이블은 table full scan이잖아요. 이 경우에는 버퍼피닝의 효과는 거의 없을 것 같다는 말씀이예요.
어차피 블럭을 순차적으로 읽어들일 것이기 때문에 읽었던 블럭을 또 읽을 일이 있나? 하는 것이죠.
select count(distinct block_no) from ( select DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) block_no from emp )
이렇게 전체 데이블 데이터가 얼마나 많은 블럭에 산재해 있는지 찾아보면
거의 94 근처에서 왔다갔다하지 않을까 하는 말씀을 드린 거예요.
저도 전문가가 아니라 정확히 어떠할 것이다 확언 드릴 수는 없습니다만
테이블풀스캔의 경우에는 버퍼피닝 효과는 많지 않을 것이라(혹은 전혀 없을 수도?) 생각합니다.