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

MySQL 데이터베이스에서 문자열을 빠르게 검색하는 방법: FULLTEXT 인덱스 활용하기

MySQL에서 대량의 텍스트 데이터를 검색할 때 FULLTEXT 검색을 사용하면 일반적인 LIKE 연산자보다 훨씬 빠른 속도로 문자열을 찾을 수 있습니다. 이 글에서는 FULLTEXT 인덱스를 생성하고 활용하는 전체 과정을 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 검색 대상이 될 텍스트 컬럼을 가진 테이블을 생성합니다.

mysql> create table DemoTable1554
    -> (
    -> Title text
    -> );
Query OK, 0 rows affected (0.63 sec)

2. FULLTEXT 인덱스 생성

다음으로 검색 속도를 높이기 위해 Title 컬럼에 FULLTEXT 인덱스를 생성합니다.

mysql> create fulltext index faster_title on DemoTable1554(Title);
Query OK, 0 rows affected, 1 warning (7.09 sec)
Records: 0  Duplicates: 0  Warnings: 1

3. 샘플 데이터 삽입

INSERT 명령어를 사용해 테스트용 레코드를 몇 개 추가합니다.

mysql> insert into DemoTable1554 values('John is working on MySQL database');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable1554 values('Adam Smith is working on Java language');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1554 values('John smith is working on Python Language');
Query OK, 1 row affected (0.17 sec)

4. 저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1554;

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

+------------------------------------------+
| Title |
+------------------------------------------+
| John is working on MySQL database |
| Adam Smith is working on Java language |
| John smith is working on Python Language |
+------------------------------------------+
3 rows in set (0.00 sec)

5. MATCH...AGAINST로 빠른 문자열 검색

FULLTEXT 인덱스가 준비되었으므로, MATCH() ... AGAINST() 구문과 불리언 모드(Boolean Mode)를 조합하여 원하는 문자열을 신속하게 검색할 수 있습니다. 여기서는 "language"라는 단어를 검색해 보겠습니다.

mysql> select * from DemoTable1554 where match(Title) against('language' in boolean mode);

검색 결과는 다음과 같습니다.

+------------------------------------------+
| Title |
+------------------------------------------+
| Adam Smith is working on Java language |
| John smith is working on Python Language |
+------------------------------------------+
2 rows in set (0.00 sec)

정리

FULLTEXT 인덱스와 MATCH...AGAINST 구문을 사용하면 MySQL에서 텍스트 검색 성능을 크게 향상시킬 수 있습니다. 특히 게시판, 블로그처럼 텍스트 검색이 잦은 서비스에서는 LIKE '%문자열%' 방식보다 FULLTEXT 검색이 훨씬 효율적입니다. 참고로 한글 검색 시에는 ngram 파서를 함께 설정하면 더 정확한 결과를 얻을 수 있습니다.