게시판의 제목, 제목+내용 검색에는 FULLTEXT 인덱스를 적용했지만, 작성자 검색에는 적용하지 않았습니다. FULLTEXT에는 불용어 개념이 있습니다. 한마디로 텍스트를 언어의 개념으로 간주하여 의미가 있는 제목, 내용에는 적합하나 주로 의미 없는 문자열로 구성된 작성자 검색에는 부적합하다 생각했습니다.
문제 진단 및 원인 분석
따라서 유니크 인덱스를 이용하여 작성자 검색을 하게 되는데 %LIKE% 검색 시 유니크 인덱스를 사용할 수 없다는 문제가 있었습니다. 이로 인해 인덱스를 포기하고 %LIKE%로 정확성을 확보할 것인지, 혹은 인덱스를 활용하여 속도를 확보할 것인지 고민했습니다.
다음과 같은 분석을 통해 해결책을 모색했습니다.
- 짧은 검색어일수록 중간 단어 검색(%LIKE%)을 선호하는 경향이 있습니다.
- 닉네임 컬럼은 카디널리티가 높아 인덱스를 활용하는 것이 효율적입니다.
- 검색어가 1~2자일 때는 인덱스를 사용하더라도 테이블 풀 스캔이 발생할 수 있습니다.
- 검색어가 충분히 길 때 인덱스를 사용하면 선택도가 높아 효용성이 높습니다.
해결 방안 및 결과
위 분석과 서비스의 닉네임 제한이 최대 8글자라는 점을 고려하여, 검색어 길이에 따라 다른 검색 방식을 적용했습니다.
- 검색어가 3자 이하일 경우: **%LIKE%**를 사용해 정확성을 확보했습니다.
- 검색어가 4자 이상일 경우: **LIKE%**를 사용해 인덱스를 활용한 속도를 확보했습니다.
이러한 개선을 통해 작성자 검색의 정확성과 성능을 모두 만족시키는 솔루션을 구축했습니다.
'트러블슈팅과 고민' 카테고리의 다른 글
| 코루틴을 이용한 크롤링 속도 개선 (0) | 2025.12.25 |
|---|---|
| 데이터 분할로 친구 관계의 연쇄 작용 제어: 실시간 친구 추천 시스템 구축기 (0) | 2025.11.23 |
| 분산락에서 비동기 스레드풀 실행 거부 예외 식별과 해결 (0) | 2025.11.19 |
| Redis TTL 만료 시점 병목 해소: Cache Stampede 방어 전략 측정 및 분석 (0) | 2025.11.03 |
| 멀티 스레드 환경에서 공유 세션으로 발생한 동시성 경합과 커넥션 누수 분석 및 해결 (0) | 2025.10.19 |