Open skarltjr opened 2 years ago
n=1: 'a', 'b', 'c', 'd'
n=2: 'ab', 'bc', 'cd'
n=3: 'abc', 'bcd'
n=4: 'abcd'
CREATE TABLE IF NOT EXISTS `T_BOARD` (
`BOARD_SEQ` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`TITLE` VARCHAR(100) NOT NULL,
`CONTENT` MEDIUMTEXT NULL DEFAULT NULL,
`USER_ID` VARCHAR(350) NULL DEFAULT NULL,
`TYPE` VARCHAR(10) NULL DEFAULT NULL,
`CRE_DATE` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`BOARD_SEQ`),
FULLTEXT INDEX `FT_TITLE` (`TITLE`) WITH PARSER `ngram`
)
ENGINE = InnoDB
AUTO_INCREMENT = 1
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci ;
안녕 뭐하고있어
-> 안녕
-> 뭐하
-> 하고
-> 고있
-> 있어
이렇게 쪼개져서 인덱스가 생성된다고 한다.
따라서 만약 안녕 | 뭐하 | ... 등으로 검색하면 해당 단어를 제목에 포함한 게시판이 검색된다.
mysql> set global innodb_ft_aux_table = 'iindex/T_BOARD';
-> 'db/table'
-> 참고 : http://www.gurubee.net/lecture/4203
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
내가 이걸 왜 기록하는가?
1. 인덱스란?
update, delete 행위가 느린것이지, update, delete를 하기 위해 해당 데이터를 조회하는것은 인덱스가 있으면 빠르게 조회
2. b-tree
참고 : https://jojoldu.tistory.com/243