728x90
반응형
인덱스라는 것이 테이블의 많은 데이터를 찾아 가기 위하여 전체 데이터를 조회 하는 대신 , 특정한 컬럼의 값을 기준으로 원하는 데이터를 쉽게 가져가기 위하여 사용이 된다.
그런데 인덱스로 생성된 컬럼에 변형이 가해지게 되면 , 해당 인덱스가 사용이 되지 않으며 , 이로 인한 성능 문제가 발생 한다는 것은 모르는 사람이 없을 것이다.
위와 같은 상황을 쿼리를 수정하면 가능하나 , 쿼리 수정이 불가능 한 경우 성능 저하를 피하기 위하여 오라클 8i 부터 FBI(Function Based Index)라는 인덱스가 새로이 추가 되었다.
이는 기존의 테이블 데이터에 변형을 가한 값을 인덱스 값으로 가지고 있게 함으로써 , 동일한 수식을 이용하는 쿼리가 수행 될 경우 Full Table Scan 대신 인덱스를 사용하여 성능 향상을 꿰 하는 것이다.
그럼 DB2에서는 어떤 방법으로 위와 같은 성능을 보장 받을 수 있을 까 ?
DB2 에서는 generated column 을 이용하면 된다.
간단한 예를 이용하여 그 사용법을 확인해 보도록 하자.
Case#1
위와 같이 테스트를 진행하기 위한 테이블 및 인덱스를 생성 후 통계정보 까지 생성해 주었다.
인덱스 컬럼에 변형이 일어나지 않을 경우 정상적으로 인덱스를 사용한다.
인덱스 컬럼이 변형됨으로 처리량이 증가 한다는 것을 확인 할 수 있다.
그럼 이번에는 DB2에서 제공하는 generated column 구문을 이용하여 동일 쿼리를 수행해 보자.
Case#2
오라클의 FBI 처럼 컬럼에 변경이 가하는 조건으로 생성되어 있는 컬럼 (ltabname)에 생성 된 인덱스를 사용하도록 쿼리가 재 작성된 것을 확인 할 수 있다.
DB2의 generated column 을 이용하여 오라클의 FBI 역활을 대신 할 수 있음을 확인 할 수 있다.
반응형