T라는 테이블안에 C1이라는 컬럼이 있음
C1이라는 컬럼의 값음 업무+sequence = 총 10자리로 설계
예) A2라는 업무
A1라는 업무 : A100003001(C1값)
A2라는 업무 : A200000100(C1값)
A3라는 업무 : A300002100(C1값)
B1라는 업무 : B100202100(C1값)
업무가 총 30~40개 정도 되고 있음 (업무별 시퀀스라고 보시면 됩니다.)
현재 문제가 되고 있는 쿼리는 아래처럼 돌고 있음니다.
SELECT MAX(C1)
FROM T
WHERE C1 LIKE :1 || '%'
:1 바인드 값으로 - A1, A2, A3, B1등 업무가 들어옴.
업무별 MAX sequence를 찾아 max +1 정도 하는것으로 사용 C1이라는 컬럼이 PK로 잡혀 있어서 range scan으로 풀리고 있습니다. ( 평균 Elapsed time 0.5초정도 걸림. )
해당 쿼리를 개선할 방법이 있을까요? 고수님들 어떻게 하는게 좋을까요?
테이블 설계를 바꿔서 업무랑 시퀀스를 분리하는게 맞지만,
공통으로 사용하는 부분이라 프로그램을 하나하나 찾아가면서 반영하기도 어렵고 테이블이 변경된 시점에 동시에 반영해야되서
쿼리 튜닝으로 성능을 개선하고자 하는데 생각만큼 성능이 나오지 않음.
(업무 key값이 무조건 2자리면 substr(c1,1,2)로 짤라서 function based index를 사용하려고 했지만 업무 key값이 2,3자리 두종류로 있더라고요)