Search
Duplicate
6️⃣

함수 기반 인덱스

: 일반적인 인덱스는 칼럼의 값 일부 또는 전체에 대해서만 인덱스 생성이 허용, 때때로 칼럼의 값을 변형했을 때 인덱스를 구축해야 할 때도 있는데, 이땐 함수 기반 인덱스를 사용
: 함수 기반 인덱스는 인덱싱할 값을 계산하는 과정의 차이만 있을 뿐, 실제 인덱스의 내부 구조 및 유지관리 방법은 B-Tree 인덱스와 동일

1. 가상 칼럼을 이용한 인덱스

CREATE TABLE user { user_id BIGINT, first_name VARCHAR(10), last_name VARCHAR(10), PRIMARY KEY (user_id) );
SQL
복사
: 위와 같은 테이블이 있다고 가정해보았을 때, frist_namelast_name을 합쳐서 검색해야할 요건이 생기면 이번 버전의 경우 full_name이라는 칼럼을 추가하고 모든 레코드에
대해 업데이트해주는 작업을 거쳐야만 full_name이라는 인덱스를 추가할 수 있었음.. 하지만 8.0부터는 가상 컬럼을 추가하고 그 가상 컬럼에 인덱스를 추가할 수 있게됨
ALTER TABLE user ADD full_name VARCHAR(30) AS (CONCAT(first_name, ' ', last_name)) VIRTUAL, ADD INDEX ix_fullname (full_name);
SQL
복사
: 이렇게 정의해주면 full_name 칼럼에 대한 검색도 새로 만들어진 인덱스를 통해 진행되는 것을 확인할 수 있다. 또한 STORED, VIRTUAL 어떤 옵션으로 진행해도 상관없으며
차이는 추후 15.8절에 설명

2. 함수를 이용한 인덱스

: 8.0부터 추가된 기능으로 테이블의 구조를 변경하지 않고도 함수를 직접 사용하는 인덱스를 생성할 수 있게 됐음
CREATE TABLE user ( user_id BIGINT, first_name VARCHAR(10), last_name VARCHAR(10), PRIMARY KEY (user_id), INDEX ix_fullname ((CONCAT(first_name,' ',last_name))) );
SQL
복사
: 함수를 직접 사용하여 정의하는 인덱스는 테이블의 구조를 변경하지 않고 계산된 결괏값의 검색을 빠르게 만들어줌, 함수 기반 인덱스를 제대로 활용하려면 반드시 조건절에 함수
기반 인덱스에 명시된 표현식이 그대로 사용되어야 함