전체 텍스트 검색은 긴 문자로 구성된 구조화되지 않은 텍스트 데이터를 빠르게 검색하기 위한 기능
긴 텍스트를 구성하는 각 단어에 대해 인덱스를 적용하는 것이 전체 텍스트 검색임
일반적 인덱스와 차이가 있다
검색에서 무시할 단어들은 인덱스로 생성하지 않는 게 좋음.
INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD
테이블에 기본 중지 단어가 있음
중지단어 등록 방법
value 열, varchar 타입은 약속임
create table stopword (value varchar(30));
insert into stopword values('');
set global innodb_ft_server_stopword_table = 'fulltextdb/stopword';
전체 텍스트 인덱스를 이용하기 위해 where절에 match() against()를 사용하면 됨
입력된 word의 정확한 단어만 검색됨. 또는 조건을 걸려면 against에 띄어쓰기로 단어를 구분해주면 됨.
select * from {table} where match({column}) against({word});
불린 모드 검색
단어나 문장이 정확히 일치하지 않아도 검색됨
IN BOOLEAN MODE 옵션을 붙여야 함
필수 +, 제외 -, 부분 검색 * 등 연산자 지원
다음과 같이 검색하면 영화가 앞에 들어간 단어가 들어간 결과가 검색됨
select * from {table} where match({column}) against('영화*' IN BOOLEAN MODE);
다음과 같이 검색하면 정확히 영화 배우라는 단어가 들어간 결과가 검색됨
select * from {table} where match({column}) against('영화 배우' IN BOOLEAN MODE);
다음과 같이 검색하면 영화 배우라는 단어가 들어간 텍스트에서 공포가 들어간 결과가 검색됨
select * from {table} where match({column}) against('영화 배우 +공포' IN BOOLEAN MODE);
다음과 같이 검색하면 영화 배우라는 단어가 들어간 텍스트에서 남자가 없는 결과가 검색됨
select * from {table} where match({column}) against('영화 배우 -남자' IN BOOLEAN MODE);
테이블을 물리적으로 여러 개의 테이블로 쪼개는 것
대용량 DB를 분산 저장해서 효율화하기 위함
mysql 8.0은 최대 8192개의 파티션을 지원함. 파티션을 나누면 물리적으로는 파일이 분리됨.
테이블을 생성할 때 파티션 키를 지정하는데 데이터 입력 시 지정된 파티션 키에 의해 데이터가 각각의 파티션에 입력됨
생일 기준으로 파티션이 나뉘어 저장됨
partition by range(birthday) (
partition part1 values less than (1971),
partition part1 values less than (1979),
partition part1 values less than maxvalue,
);
파티션 분할
alter table partTBL
reorganize partition part3 into (
partition part3 values less than (1986),
partition part4 values less than maxvalue
);
optimize table partTBL; // 적용
파티션 합치기
alter table partTBL
reorganize partition part1, part2 into (
partition part12 values less than (1979)
);
optimize table partTBL; // 적용
레인지 파티션은 숫자형의 연속된 범위를 파티션 키로 지정.
리스트 파티션은 숫자형 또는 문자형의 연속되지 않은 하나하나씩 파티션 키를 지정.
파티션 테이블에 외래 키를 설정할 수 없음
출처 이것이 mysql이다