개발기초

양방향 LIKE 연산자(% LIKE %) 사용시 인덱스

Veams 2023. 5. 10.

와일드카드 %가 한 쪽만 있는 경우 (양방향이 아닌 경우)

- 문자열 끝에만 있는 경우 인덱스를 사용하여 검색을 최적화할 수 있다.

SELECT * FROM users WHERE name LIKE 'John%';


위의 쿼리에서는 'John'으로 시작하는 이름을 검색하고 있으며, 데이터베이스는 인덱스를 사용하여 일치하는 결과를 빠르게 찾을 수 있다.

 

와일드카드 %가 양방향으로 있는 경우

- 일반적으로 양방향 LIKE 연산자를 사용하면 데이터베이스의 인덱스를 사용할 수 없다.

 

예를 들어, 다음과 같은 쿼리에서 인덱스를 사용할 수 없다.

SELECT * FROM users WHERE name LIKE '%John%';

 

위의 경우, 와일드카드 '%'가 문자열의 양쪽에 있어서 데이터베이스는 인덱스를 사용하지 않고 전체 테이블 스캔을 수행해야 한다. 전체를 스캔해야 하기 때문에 테이블 크기가 크면 클수록 성능에 부정적인 영향을 미칠 수 있다.

 

FULLTEXT 인덱스 : MySQL(5.6버전 이상)이라면 방법은 있다.

- 양방향 LIKE 연산자를 사용해야 하는 경우에도 인덱스를 활용하는 방법이있다.

- MySQL 환경이라면, `FULLTEXT` 인덱스를 사용하여 자연어 검색을 최적화하는 방법이다. 

- `FULLTEXT` 인덱스는 텍스트 데이터를 빠르게 검색할 수 있는 인덱스로, 전체 테이블 스캔을 피할 수 있다.

- FULLTEXT 인덱스는 특히 자연어 검색불완전한 문자열 검색에 적합하며, 일반적인 인덱스와 달리 양방향 와일드카드 검색에도 효과적이다.

- MySQL에서 MyISAM 및 InnoDB 스토리지 엔진에서 사용할 수 있다.


댓글