RealMySQL 8.6-7

흑이·2023년 5월 11일
0

함수 기반 인덱스

  • 일반적인 인덱스는 칼럼 값 일부(칼럼의 값 앞부분) 또는 전체에 대해서만 인덱스 생성이 허용된다.

  • 칼럼의 값을 변형해서 만들어진 값에 대해 인덱스를 구축하는 경우도 있는데, 함수 기반의 인덱스를 활용하면 된다.


함수 기반 인덱스를 구현하는 방법은 두 가지 이다.


MySQL 서버의 함수 기반 인덱스는 인덱싱할 값을 계산하는 과정의 차이만 존재
실제 인덱스의 내부적인 구조 및 유지관리 방법은 B-Tree 인덱스와 동일하다.


가상 칼럼을 이용한 인덱스

  • 컬럼을 합쳐서 검색해야 하는 경우, 두 칼럼의 값을 합친 가상 칼럼을 추가하고 그 가상 칼럼에 인덱스를 생성할 수 있다.

  • 가상 칼럼은 테이블에 새로운 칼럼을 추가하는 것과 같은 효과를 내기 때문에 실제 테이블의 구조가 변경된다는 단점이 있다.


함수를 이용한 인덱스

  • 테이블의 구조를 변경하지 않고 함수를 직접 사용하는 인덱스를 생성할 수 있다.
  • 함수를 직접 사용하는 인덱스는 테이블의 구조를 변경하지 않고, 계산된 결과값의 검색을 빠르게 만들어 준다.

가상 칼럼과 함수를 직접 이용하는 인덱스는 내부적으로 동일한 구현 방법을 사용한다.
내부적인 구현이 동일한 것이라 볼 수 있으며, 어떤 방법을 사용하더라도 둘의 성능차이는 발생하지 않는다는 것을 의미한다.


멀티 밸류 인덱스

  • 전문 검색 인덱스를 제외한 모든 인덱스는 레코드 1건이 1개의 인덱스 키 값을 가진다.

  • 멀티 밸류 인덱스는 하나의 데이터 레코드가 여러 개의 키 값을 가질 수 있는 형태의 인덱스다.

  • 멀티 밸류 인덱스를 활용하기 위해서는 일반적인 조건 방식이 아닌, 반드시 다음 함수들을 이용해서 검색해야 옵티마이저가 인덱스를 활용한 실행 계획을 수립한다.

  • MEMBER OF()
    JSON_CONTAINS()
    JSON_OVERLAPS()


-- 특정 값이 멀티 밸류 필드에 포함되어 있는 레코드를 조회하는 예시
SELECT *
FROM my_table
WHERE 'value1' MEMBER OF (multi_value_field);


-- 멀티 밸류 필드에 특정 값이 포함되어 있는 레코드를 조회하는 예시
SELECT *
FROM my_table
WHERE JSON_CONTAINS(multi_value_field, 'value1');


-- 두 멀티 밸류 필드가 중복되는 값을 가지고 있는 레코드를 조회하는 예시
SELECT *
FROM my_table
WHERE JSON_OVERLAPS(multi_value_field1, multi_value_field2);

0개의 댓글