mojh7 / real-mysql-study

:orange_book: Real MySQL 8.0 study
0 stars 0 forks source link

2023/04/12 ~ 2023/04/26 #50

Open danbi5228 opened 1 year ago

danbi5228 commented 1 year ago

다음 스터디

2023-04-~17~ 26 pm 10:10 ~월요일~ 수요일

정리 범위

  1. 11.8
  2. 12장 ~ 12.1.1
github-actions[bot] commented 1 year ago

정리 범위 무작위 선택 봇 🔎

  1. 단비
  2. 장현
danbi5228 commented 1 year ago

11.8 쿼리 성능 테스트

11.8.1 쿼리의 성능에 영향을 미치는 요소

11.8.1.1 운영체제의 캐시

11.8.1.2 MySQL 서버의 버퍼 풀(InnoDB 버퍼 풀과 MyISAM의 키 캐시)

11.8.1.3 독립된 MySQL 서버

11.8.1.4 쿼리 테스트 횟수

mojh7 commented 1 year ago

12. 확장 검색

MySQL 서버의 대표적인 확장 검색기능인 전문 검색과 공간 검색 기능


12.1 전문 검색

전문 검색은

8.0 이전 버전에서는 일부 스토리지 엔진을 사용하는 테이블만 전문 검색을 활용할 수 있었고

8.0에서는 가장 사용률이 높은 InnoDB 스토리지 엔진에서도 사용할 수 있게 개선됨


문서의 단어들을 분리해서 형태소를 찾고 그 형태소를 인덱싱하는 방법은 서구권 언어에 적합하지 한국어, 중국어, 일본어에는 적합하지 않다

이런 단점을 보완하기 위해 8.0버전에서 n-gram 파서가 도입됐다


12.1.1 전문 검색 인덱스의 생성과 검색

MySQL 서버에서는 2가지 알고리즘을 이용해 인덱싱할 토큰을 분리해낸다


형태소 분석

n-gram

주의할 점

책에 쿼리를 보면, 조회가 된 경우

조회가 안된 경우

결론은

그리고 단어의 시작 부분이 아니고 중간이나 마지막 부분도 n-gram이 검색할 수 있다는 것이 중요한 특징이다

218~219p 표를 보면 ngram_token_size=2 일 때 1글자인 '이'는 버려짐

n-gram 파서는 전문 검색 인덱스를 생성할 때 말고도 쿼리의 전문 검색에서도 사용된다

SELECT COUNT(*) FROM tb_bi_gram
WHERE MATCH(title, body) AGAINST ('단편적인' IN BOOLEAN MODE);

ngram_token_size=2 일 때 이미 2글자씩 토큰을 잘라서 인덱스에 저장하고 있는데

어떻게 4글자의 검색어를 이용해서 결과를 찾을 수 있나?

주의할 점