1. 기술 설명

게시물 조회 시 조회 기준 컬럼에 인덱스 부여해서 처리 속도 쿼리 속도 향상

  1. 트러블 슈팅 처음에 제목에 검색어로 조회하는 부분에 인덱스 부여해서 검색속도를 향상시키려고 했지만

(인덱스 부여) ALTER TABLE community_posts ADD FULLTEXT idx_title_fulltext (title); (쿼리 실행 확인) EXPLAIN SELECT * FROM community_posts WHERE *MATCH*(title) *AGAINST*('+dog*' IN BOOLEAN MODE);

테스트 해본 결과 성능 향상이 별로 없었습니다. 분석해본 결과 LiKE 구문으로 FULLTEXT 인덱스를 적용하는 것은 어차피 제목 전체 검색을 하게 되어서 성능향상에 아무런 도움이 되지 않았습니다.

  1. 해결 계획 추후 이 부분은 ELK를 사용해서 Elasticsreach를 적용하여 제목이나 내용검색에 적용할 예정입니다.

  2. 다른 부분에 인덱싱 적용 제목의 키워드 검색 대신 조회수와 추천수 순으로 조회하고 페이징 처리 하는 부분에서 인덱싱을 도입했습니다.

    CREATE INDEX idx_views ON community_posts (views); CREATE INDEX idx_like_count ON community_posts (like_count);

조회수에 인덱스 미적용시 (1000번째 페이지 검색)

Untitled

조회수에 인덱스 적용시 (1000번째 페이지 검색)

Untitled

추천수에 인덱스 미적용시 (1000번째 페이지 검색)

Untitled

추천수에 인덱스 적용시 (1000번째 페이지 검색)

Untitled

결과값을 보다시피 페이징 처리에서 인덱스 도입은 큰 성능 차이를 보여주었습니다. 5. 추가로 주의할 점 SQL에서 쿼리를 점검할 때 여러번의 테스트를 반복해봐야 하는데

EXPLAIN SELECT SQL_NO_CACHE 위와 같이 SQL NO CACHE 옵션을 덧붙이지 않으면 동일한 작업을 SQL이 자체적으로 캐시에 저장하고 있다가 결과값을 보여주기 때문에 테스트가 제대로 되지 않습니다. 인덱스를 부여하고 제거하는 과정을 반복해도 한번 부여되었을 때 나온 결과가 그대로 나오게 됩니다. 테스트 시에 주의해야 합니다.

ELK(Elasticsearch, Logstash, Kibana) 를 통한 게시물 검색 기능 구현

Elasticsearch 사용 이유