■ Full table scan
  - 순차적 블록 액세스
  - 멀티블록I/O 및 병렬화 가능


■ Index scan
  - 인덱스 블록 액세스 후 ROWID를 통해 데이터 블록 획득
  - 비순차적 블록 액세스
  - 멀티블록I/O 사용 불가 (싱글블록I/O)


■ Fast full index scan
  - 질의에 필요한 모든 컬럼이 인덱스에 포함된 경우
  - 멀티블록I/O 및 병렬화 가능



◆ 결합 인덱스의 between과 in의 비교
  - 구간검색 시 between보다 in이 속도가 훨씬 빠르다.
20100501 ~ 20100531 사이에 판매된 맛동산 정보 찾는 쿼리를 날린다고 가정하자.(맛동산 제품코드=100)

SQL> select *
   from 판매
   where p_code = 100
   and p_date between '20100501' and '20100531';

위와 같은 쿼리를 예상하는데, 아래와 같이 해주면 쿼리가 훨씬 빠르다.

SQL> select *
   from 판매
   where p_code = 100
   and p_date in ('20100501', '20100502', ..., '20100531');

그러나 만약 6개월치를 찾아야 한다면 어떻게 될까? 6개월 치 모두를 in 연산자 안에 써주어야 할까? 그래도 되지만 일일이 다 써주는 것보다는 서브쿼리를 이용해 아래처럼 해주면 될 것이다.

SQL> select *
   from 판매
   where p_code = 100
   and p_date in (select sdate
                        from ttable          // ttable은 날짜만 들어있는 테이블
                        where sdate between '20100501' and '20101231');



◆ Index full scan과 Index fast full scan의 비교
  - Index full scan이라는 것이 실행계획에 나오면 굉장히 느린 것이다. 인덱스를 타긴 타는데 처음부터 끝까지 읽기 때문에 인데스를 사용하는 것에 비해 효율이 떨어진다.

  ○ Index full scan
    - 인덱스를 처음부터 끝까지 순차적으로 읽어들임.
    - 병렬처리를 하지 못함.
    - 사용하지 않는 것이 좋다.

  ○ Index fast full scan
    - 인덱스를 비순차적으로 처음부터 끝까지 읽어들임.
    - 병렬처리 가능함.
    - 인덱스로 구성된 컬럼만을 조회할 때 사용 가능.
    - 멀티블록I/O 가능.
/*+ INDEX_FFS(테이블명 인덱스명) */
Posted by 겨울섬
,