BETTER WAY 17 인덱스에서 계산 결과를 사용할 시기를 파악하자
‘BETTER WAY 11. 인덱스와 데이터 스캔을 최소화하도록 인덱스는 신중히 만들자’에서는 계산 컬럼을 저장하기보다는 함수를 사용하는 내용을 다루었다. 함수 기반의 계산 컬럼을 인덱스로 만드는 것이 가능하므로, 여러분이 생각하는 것만큼 불리하지는 않다.
DB2는 함수 기반 인덱스를 zOS에서는 9 버전부터 지원하지만, LUW에서는 10.5 버전부터 지원한다. 하지만 사용자 정의 함수는 인덱스에서 사용할 수 없다. 한 가지 해결책은 함수나 표현식의 결과를 저장하는 실제 컬럼을 만들고(애플리케이션이나 트리거로 관리해야 한다), 이 컬럼을 인덱스로 만드는 것이다. 이 새 컬럼은 인덱스로 만들 수 있고 WHERE 절에서도 표현식 없이 사용할 수 있다.
MySQL은 5.7 버전부터 다른 컬럼의 계산 결과 값을 저장하는 GENERATED 컬럼을 인덱스로 만들 수 있다. 그 이전 버전에서는 DB2에서 처리한 것과 같은 방식으로 사용해야 한다.
오라클은 8i 버전부터 함수 기반 인덱스를 지원하고, 11g 버전부터는 가상 컬럼을 지원한다.
PostgreSQL은 7.4 버전부터 표현식에서 인덱스를 사용할 수 있고, 7.2 버전부터는 부분적으로 지원한다.