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
반응형