320x100 728x90 문자열검색2 MySQL의 Full-text index를 이용하여 검색 API 성능 개선하기 사내에서 테스트 커뮤니티 매체를 만들고 있는데, 테스트성으로 만든 매체다보니, 커뮤니티의 게시글을 검색하는 API에서 Like '%검색어%' 절로 간단하게 작성해 놨다. 그러다 보니 트래픽이 분당 500~700 사이었는데도 불구하고 RDS의 cpu가 항상 95~98%로 상당히 많은 부하가 있었다. 어찌 보면 당연한 결과다. like절은 인덱스를 타지 않고 기본적으로 풀스캔으로 동작을 하게 된다. 데이터는 약 16만 건의 row가 있었다. EXPLAIN SELECT * FROM contents c WHERE title LIKE '%검색어%'; explain으로 쿼리 전략을 살펴보면 모든 row를 스캔하고 그 대상은 약 13만 건의 데이터임을 알 수 있다. 사용자가 실제로 분당 30~40건의 검색 API를 .. 2023. 1. 16. Mybatis] MySQL] concat 문자열 검색 문제는 위 사진으로부터 시작됐다. mybatis에서 mapper설정을 해서 사용하던 중, like절에서 파라미터가 포함된 문자열을 검색해야 했는데, 따옴표 안에 넣으니 #{param}도 문자열로 인식해버렸다. 해결 MySQL의 concat함수를 이용해서 문자열을 더해주면서 문제를 해결했다. native 쿼리를 위와 같이 작성해주면, 쿼리가 실행되는 시점에서 파라미터와 '%%'을 합침으로써 의도한 대로 쿼리를 잘 실행했다. 2021. 1. 19. 이전 1 다음 300x250 320x100