카테고리 없음

디비 스터디

JIN_Coder 2023. 8. 21. 04:10

시진엽

공간 인덱스

R-Tree 인덱스 알고리즘을 잉요해 2차원의 데이터를 인덱싱하고 검색하는 목적의 인덱스

R-Tree는 인덱스를 구성하는 칼럼의 값이 2차원의 공간 개념 값

 

구조 및 특성

GEOMETRY 타입은 나머지 3개 타입의 슈퍼 타입으로 POINT와 LINE, POLYGON 객체를 모두 저장 가능함

 

MBR : 해당 도형을 감싸는 최소 크기의 사각형의 의미

이 사각형들의 포함 관계를 B-Tree형태로 구현한 인덱스가 R-Tree 인덱스

최하위 레벨의 MBR은 각 도형 데이터의 MBR을 의미

최상위 레벨의 MBR은 중간 크기의 MBR

최상위 MBR은 R-Tree의 루트 노드에 저장된 정보, 차상위 그룹 MBR은 R-Tree의 브랜치 노드, 마지막으로 각 도형의 객체는 리프 노드에 저장

 

R-Tree 인덱스의 용도

R-Tree는 MBR 정보를 이용해 B-Tree형태로 인덱스를 구축, 공간인덱스

일반적으로 GPS 기준의 위도, 경도 좌표 저장에 주로 사용됨

전문 검색 인덱스

대표적으로 MySQL의 B-Tree인덱스는 실제 칼럼의 값이 1MB이더라도 1MB 전체의 값을 인덱스 키로 사용하는 것이 아니라 1000바이트 또는 3072바이트까지만 잘라서 인덱스 키로 사용함

전체 일치 또는 좌측 일부 일치와 같은 검색만 가능

문서의 내용 전체를 인덱스화 해서 특정 키워드가 포함된 문서를 검색하는 전문 검색에는 InnoDB나 MyISAM 스토리지 엔진에서 제공하는 일반적인 용도의 B-Tree인덱스를 사용할 수 없음

 

인덱스 알고리즘

전문 검색 인덱스는 문서의 키워드를 인덱싱하는 기법에 따라 크게 단어의 어근 분석과 n-gram분석 알고리즘으로 구분

불용어 처리 : 검색에서 별 가피가 없는 단어를 모두 필터링해서 제거하는 작업

어근 분석 알고리즘 : 검색어로 선정된 단어의 뿌리인 원형을 찾는 작업

한글이나 일본어는 어근 분석보다는 문자으이 형태소를 분석해서 명사랑 조사를 구분하는 기능이 더 중요한 편

Mecab을 이용해 한글 분석 다만, MySQL에 적용은 쉽지만, 완성도 높히는 작업이 어려운편

 

n-gram 알고리즘

MeCab을 위한 형태소 분석은 매우 전문적인 전문 검색 알고리즘이어서 리소스가 많이 필요함

이러한 단점을 보완하기 위한 방법으로 n-gram 알고리즘 도입

형태소 분석이 문장을 이해하는 알고리즘, n-gram은 단순히 키워드를 검색해내기 위한 인덱싱 알고리즘

n-gram : 본문을 무조건 몇 글자씩 잘라서 인덱싱 하는 방법

n-gram의 n은 인덱싱 할 키워드의 최소 글자 수 의미

일반적으로 2글자를 자르는 2-gram방식이 많이 사용

 

불용어 변경 및 삭제

n-gram의 토큰 파싱 및 불용어 처리예시로 at, io는 불용어로 등록돼어 있기 때문에 걸러짐

 

전문 검색 인덱스의 불용어 처리 무시

스토리지 엔진에 관계없이 MySQL의 모든 전문 검색인덱스에 대해 불용어를 완전히 제거

innodb_ft_enable_stopword 시스템 변수를 off로 설정

SET GLOBAL innodb_ft_enable_stopword = OFF;

MySQL 설정 파일(my.cnf)의 ft_stopword_file 시스템 변수에 빈 문자열을 설정

ft_stopword_file = ""

ft_stopword_file은 불용어 처리 무시도 하지만, 직접 등록도 가능함

 

전문 검색 인덱스의 가용성

전문 검색 인덱스를 사용하려면 2가지 조건 만족

  1. 쿼리 문장이 전문 검색을 위한 문법(MATCH … AGAINST …)을 사용
  2. 테이블이 전문 검색 대상 칼럼에 대해서 전문 인덱스 보유

 

함수 기반 인덱스

일반적인 인덱스는 칼럼의 값 일부 또는 전체에 대해서만 인덱스 생성이 허용됨

칼럼의 값을 변형해서 만들어진 값에 대해서 인덱스 구축시 함수 기반 인덱스 혹은 가상 칼럼 이용한 인덱스 사용

가상 칼럼을 이용한 인덱스

함수 기반 인덱스