
검색 쿼리에 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 |
컬럼마다 인덱스 적용한 것과 복합인덱스 결과를 보면 인덱스 적용한 것이 조금은 더 빠라진걸 확인 할 수 있다.
그리고 단일 인덱스가 조회할것이 적을 수록 빠른게 나타났다.
하지만 아까도 말했듯이 포함된 단어를 검색을 위해 단어 전체 앞부분을 다쳐야하는것이 검색기능으로써 의미가 있는지 의문은 여전하다.
'java 배우기 > TIL' 카테고리의 다른 글
| 게시물 검색 최적화 작업 2-5 (인덱스 종합) (4) | 2024.11.08 |
|---|---|
| 게시물 검색 최적화 작업 2-4 (데이터 량 늘리기) (0) | 2024.11.08 |
| 게시물 검색 최적화 작업 2-2 (인덱스 설정 에러) (0) | 2024.11.07 |
| 게시물 검색 최적화 작업 2-1 (인덱스 설정 수정) (0) | 2024.11.07 |
| 게시물 검색 최적화 작업 2 (인덱스 적용) (0) | 2024.11.07 |