Programming-[Backend]/SQL

[TIL] 문자열 LIKE 검색 인덱스 MYSQL

컴퓨터 탐험가 찰리 2025. 2. 27. 09:24
728x90
반응형

 

DB 컬럼 설계 시 name과 같이 사람이 알아볼 수 있는 문자열의 컬럼이 있고, 그를 검색하는 로직이 있는 경우가 흔하다.

 

이 때, name을 index로 잡더라도 LIKE 검색 시에는 무조건 동작하지 않는다. MYSQL에 한해, 다음과 같은 조건으로만 인덱스가 적용된다. 인덱스가 적용되지 않을 경우 full scan이 적용되어 주의해야한다.

 

• Containing → %값% (부분 검색) → 인덱스 사용 X

• StartingWith → 값% (접두어 검색) → 인덱스 사용 O

• EndingWith → %값 (접미어 검색) → 인덱스 사용 X

 

 

JPA의 경우의 예시이다. 위 규칙에 따라 적용된다고 생각하면 된다.

 

findByNameContaining("abc") WHERE name LIKE '%abc%'

findByNameStartingWith("abc") WHERE name LIKE 'abc%'

findByNameEndingWith("abc") WHERE name LIKE '%abc'

728x90
반응형