Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 함수 기반 인덱스 생성하는 방법 완벽 가이드

MySQL에서 함수 기반 인덱스를 사용할 수 있나요?

MySQL 5.6 미만 버전에서는 함수 기반 인덱스를 생성할 수 없었습니다. 이 글에서는 MySQL에서 함수 기반 인덱스를 만드는 방법을 단계별로 살펴보겠습니다.

1단계: 테스트용 테이블 생성

먼저 함수 기반 인덱스를 적용할 테이블을 생성합니다.

mysql> create table FunctionIndexDemo
   -> (
   -> FirstName varchar(100)
   -> );
Query OK, 0 rows affected (0.70 sec)

2단계: 함수 기반 인덱스 생성 문법

함수 기반 인덱스를 생성하는 기본 문법은 다음과 같습니다.

create index index_name on yourTableName (column_name(IntegerSize));

여기서 IntegerSize는 인덱스를 적용할 문자열의 접두사 길이를 의미합니다. 즉, 전체 컬럼 값이 아닌 지정한 길이만큼의 앞부분에 대해서만 인덱스가 생성됩니다.

3단계: 실제 인덱스 생성 쿼리 실행

다음은 FirstName 컬럼의 앞 6자에 대해 인덱스를 생성하는 쿼리입니다.

mysql> create index indFirstName on FunctionIndexDemo (FirstName(6));
Query OK, 0 rows affected (0.56 sec)
Records: 0  Duplicates: 0  Warnings: 0

4단계: 인덱스 생성 여부 확인

인덱스가 정상적으로 생성되었는지 확인하려면 SHOW INDEX 명령어를 사용합니다.

mysql> SHOW INDEX FROM FunctionIndexDemo;

실행 결과는 다음과 같습니다.

+-------------------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table             | Non_unique | Key_name     | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
+-------------------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| functionindexdemo |          1 | indFirstName |            1 | FirstName   | A         |           0 |        6 |   NULL | YES  | BTREE      |         |               | YES     |
+-------------------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
1 row in set (0.24 sec)

결과 분석

출력 결과에서 확인할 수 있는 주요 정보는 다음과 같습니다.

Sub_part = 6: FirstName 컬럼의 앞 6자에 대해서만 인덱스가 적용되었음을 의미합니다.
Index_type = BTREE: B-트리 구조로 인덱스가 생성되었음을 나타냅니다.
Non_unique = 1: 중복 값을 허용하는 일반(비고유) 인덱스임을 보여줍니다.

이처럼 MySQL에서는 컬럼 값의 일부(접두사)에 인덱스를 적용하여 저장 공간을 절약하고 검색 성능을 최적화할 수 있습니다. 참고로, 표현식 자체에 대한 진정한 의미의 함수 기반 인덱스(Functional Index)는 MySQL 8.0.13부터 공식적으로 지원됩니다.