full text index 기술 적용 이유
이전 index에서 설명했듯이 like%처럼 검색어의 앞글자만으로는
검색어를 포함하는 경우가 있는 우리의 검색 기능들을 처리할 수 없겠다라는 판단이 들어서
full text index를 적용하기로 했다.
index를 적용해서 검색을 할 경우 검색어로 시작하는 경우만 향상된 검색 성능을 가질 수 있다.
select * from store where store_name like “성수%”
하지만 성수로 시작하는 가게이름이 아닌 성수가 포함된 가게이름까지 같이 검색해야한다면
적용해뒀던 index는 사용할 수 없고 %like% 쿼리를 사용할 경우 full scan을 하게 된다.
이러한 상황에서 적용할 수 있는 기술이 full text index이다.
검색 성능 향상 ( 검색기준 : 220만건 )
full text index란
긴 문자의 텍스트 데이터를 빠르게 검색하기 위한 mysql의 부가 기능으로
인덱스종류의 한가지라고 볼 수 있다.
full text index는 첫글자 뿐 만 아니라 중간의 단어나 문장으로도 인덱스를 생성해 주기 때문에
원하는 검색 결과를 얻을 수 있다.
full text index 생성 삭제
index 생성할 table의 구조
// 생성
CREATE FULLTEXT INDEX 인덱스이름 ON 테이블이름 (열이름);
⇒ create fulltext index store_full_index on store(store_name);
// 삭제
ALTER TABLE 테이블이름 DROP INDEX FULLTEXT (열이름);
⇒ alter table store drop index fulltext(store_full_index);
자세한 검색 조건 링크 참조
[MYSQL] 📚 풀텍스트 인덱스(Full-Text Index) 사용법
보통 mysql 에서 텍스트 문자열을 검색시 like 나 instr 연산자를 사용해 원하는 텍스트를 필터링하여 조회할 수 있다. SELECT * FROM FulltextTbl WHERE description LIKE '%남자%'; -- 중간에 남자 들어간 글 검색
inpa.tistory.com
Full-Text Index
- 도입 이유 :
- 검색 정확도 개선을 위해 Full-Text Index 도입을 고려
- ( BTree-Index는 데이터 실효성 측면에서 사용이 어려움 )
- 테스트 결과 :
- 1차 테스트 결과 비교:
Full-Scan
3072건 / 1.45초 소요
B-Tree Index
26건 / 0.02초 소요
Full-Text Index 검색
346건 / 0.03초 소요
⇒ 테스트 결과 : Full Scan > Full Text Index > Index
근데 왜 Full-Scan보다 결과가 적게 나왔을까? 이부분에 대해서도 고민을 해볼 필요가 있었다.
'legacy > Pin-Table 성능 개선 기록' 카테고리의 다른 글
검색 성능 개선 #12 Stop-word / ngram parser (0) | 2023.02.26 |
---|---|
검색 성능 개선 #11 Full-Text Index 검색조건 (0) | 2023.02.26 |
검색 성능 개선 #9 Composite Index (복합인덱스) (0) | 2023.02.26 |
검색 성능 개선 #8 Optimizer에 의한 full scan 발생 (0) | 2023.02.09 |
검색 성능 개선 #7 B-TREE index란 (0) | 2023.02.09 |