skarltjr / Memory_Write_Record

나의 모든 학습 기록
0 stars 0 forks source link

FULLTEXT INDEX WITH PARSER `ngram` #55

Open skarltjr opened 2 years ago

skarltjr commented 2 years ago

1. 인덱스란?

2. b-tree

image

참고 : https://jojoldu.tistory.com/243

skarltjr commented 2 years ago

3. N-GRAM 전문 검색

4. 직접구성해보기

INSERT INTO T_BOARD(TITLE,CONTENT) VALUES('hello world','test');

SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;

![image](https://user-images.githubusercontent.com/62214428/147844673-7ee14cb1-9fa4-4c73-ab6f-066244c05dda.png)
- 의도와 다른 부분이 몇개보인다. 나중에 더 알아보자

- 4. 테스트

DELIMITER $$ DROP PROCEDURE IF EXISTS loopInsert$$

CREATE PROCEDURE loopInsert() BEGIN DECLARE i INT DEFAULT 1;

WHILE i <= 50000 DO
    INSERT INTO T_BOARD(TITLE , CONTENT)
      VALUES(concat('title',i), concat('content',i));
    SET i = i + 1;
END WHILE;

END$$ DELIMITER $$

call loopInsert;

## 성능 확인
### 1. 실패
- 기본 like `select*from T_BOARD where TITLE like '%title%';` : 0.09s
- `select*from T_BOARD where match(TITLE) against('title' IN BOOLEAN MODE);` : 1.8s

데이터보다 더 많은 인덱스를 모두 뒤져서 오히려 시간이 증가해버렸다

### 2. 성공
- `select*from T_BOARD where match(TITLE) against('+12 +23' IN BOOLEAN MODE);` : 0.01s
- `select*from T_BOARD where TITLE like '%1234%';` : 0.05s

올바른 방법은 우리가 보통 검색을 할 때 서울 동작구 맛집처럼 검색하지 서울동작구맛집으로 검색하지 않는다 즉 AGAINST('+12 +23 +34' IN BOOLEAN MODE) 와 같은 구문을 사용 해야한다.



참고 : https://blog.naver.com/PostView.nhn?blogId=jjdo1994&logNo=222348191751
skarltjr commented 2 years ago

내가 이걸 왜 기록하는가?