티스토리 뷰

반응형

오라클에서 파티션키 값을 검색 조건으로 사용할 경우 주의할 점 1가지를 소개해 드립니다.


피티션 테이블명: T_ORDERS

피티션 키: ORDER_DT

인덱스: CUST_NO   (고객번호)


위와 같은 상황에서 'AAA' 고객을 거래내역을 조회하는 경우에 ORDER_DT에  조건에 논리적 오류가 있을 경우에 

문제가 생깁니다.


SELECT *

FROM T_ORDERS

WHERE CUST_NO = 'AAA'

     AND ORDER_DT BETWEEN '20170101' AND '20170102'

;

>> 정상적으로 고객번호 인덱스를 Access하는 실행계획이 수립됨.



SELECT *

FROM T_ORDERS

WHERE CUST_NO = 'AAA'

     AND ORDER_DT BETWEEN '20170101' AND '20171231'

;

>> 범위 조건에서 후행 값이 더 작아 버리는 논리적 오류가 생기면  고객번호 인덱스를 무시하고

     FULL TABLE SCAN 발생


즉, 일반테이블은 위와 같은 상황에서 FULL TABLE SCAN이 발생하지 않지만 파티션 테이블에서 파티션 키값에

논리적 오류가 있을 경우 FULL TABLE SCAN이 발생함.

의도적으로 특정 상황에서 논리적 오류를 발생해야 할 경우에는  /*+ INDEX(T_ORDERS 고객번호인덱스명) */

과 같이 흰트를 주면 됨.




반응형