티스토리 뷰

안녕하세요 강정호입니다.

오늘은 DB의 인덱스 중에서 함수기반 인덱스에 대해서 공부해볼 예정입니다.

 

인덱스를 사용하면서 우리는 질문을 하게 됩니다.

과연 인덱스는 어느 컬럼에 만들어야 할까요?

거의 대부분 "WHERE 절에 오는 조건 컬럼이나 조인 컬럼 등에 만들어야 한다" 입니다.

ex) WHERE pay = 1000이란 조건일 경우, pay 컬럼에 인덱스를 만들어야 합니다.

 

But!! 만약 pay 컬럼으로 인덱스를 생성했는데, 정작 SQL 문장에서는 WHERE pay + 1000 = 2000이라는 조건으로 조회를 했다고 하면 pay 컬럼의 인덱스는 사용할 수 없게 됩니다. --> INDEX Suppressing Error

* INDEX Suppressing Error : 인덱스를 잘 생성해 놓고 SQL을 잘못 작성해서 인덱스를 사용할 수 없는 경우.

 

명심할 것 : 인덱스를 사용하려면 WHERE절의 조건을 절대로 다른 형태로 가공해서 사용하면 안된다

 

하지만 회사 업무상 반드시 WHERE pay + 1000 = 2000이라는 형태로 써야할 수도 있다.

이럴 땐 인덱스를 생성할 때 (pay+1000)라고 해야 한다. --> 이것을 함수기반 인덱스라고 한다.

 

생성 예제

CREATE INDEX idx_prof_pay_fbi
ON professor(pay+1000) ; 

장점 : 업무 상황에 따라서 컬럼을 가공하여 인덱스를 만들수 있다.

단점 : 쿼리의 조건이 변경되면 인덱스를 다시 만들어야한다.

 

댓글