java 배우기/TIL

게시물 검색 최적화 작업 2-3 (Like 부분 수정)

checkuu 2024. 11. 8. 00:00

검색 쿼리에 Like 부분을 수정하기 위해서 

변경 전

@Query("SELECT b FROM Board b WHERE b.title LIKE %:keyword% OR b.content LIKE %:keyword%")
List<Board> searchBoardByTitleOrContent(String keyword);

변경 후

@Query("SELECT b FROM Board b WHERE b.title LIKE :keyword% OR b.content LIKE :keyword%")
List<Board> searchBoardByTitleOrContent(String keyword);

 

이렇게 바꿔봤다. keyword 앞뒤로 % 가있으면 데이터베이스는 해당 컬럼의 값을 처음부터 끝까지 순차적으로 검색해야 하므로 인덱스를 제대로 활용할 수 없다 라고 했기때문에 진행한 테스트이다.

like 없는 버전도 테스트 해볼 생각이다.

 

쿼리의 조건이 바꼈기 때문에 인덱스 없는 기본값부터 테스트 해보겠다.

 

테스트 결과

 

  검색어 검색 시간
1 Title 1409 ms
2 Content 1315 ms
3 Title 1 125 ms
4 Title 15 52 ms
5 Title 100000 43 ms

 

keyword 앞에 % 빠져서 숫자만으로는 검색이 안됐다.

그래서 Title 1 이런식으로했는데 아무래도 %가 앞뒤로 붙어있을때보다 검색속도는 빨랐다.

하지만 1 하나쳤을때 포함하는 모든 게시글이 검색안된다면 검색기능의 의미가 있을지 의문이다.

 

컬럼별 인덱스 적용

 

테스트 결과

  검색어 검색 시간
1 Title 1340 ms
2 Content 1169 ms
3 Title 1 141 ms
4 Title 15 25 ms
5 Title 100000 6 ms

 

 

복합 인덱스

 

태스트 결과 (복합 index 적용)

 

  검색어 검색 시간
1 Title 1314 ms
2 Content 1206 ms
3 Title 1 131 ms
4 Title 15 55 ms
5 Title 100000 43 ms

 

컬럼마다 인덱스 적용한 것과 복합인덱스 결과를 보면 인덱스 적용한 것이 조금은 더 빠라진걸 확인 할 수 있다.

그리고 단일 인덱스가 조회할것이 적을 수록 빠른게 나타났다.

하지만 아까도 말했듯이 포함된 단어를 검색을 위해 단어 전체 앞부분을 다쳐야하는것이 검색기능으로써 의미가 있는지 의문은 여전하다.