RealMySQL 8.4 ~ 8.5

흑이·2023년 4월 12일
0

R-Tree 인덱스

  • 공간 인덱스는 R-Tree 인덱스 알고리즘을 이용해 2차원의 데이터를 인덱싱하고 검색하는 목적의 인덱스다.

  • 최근 GPS나 지도 서비스와 같이 위치 기반 서비스를 구현하는 방법 중에 하나로 MySQL의 공간 확장을 이용하면 간단하게 이러한 기능을 구현할 수 있다.

  • MySQL의 공간 확장을 이용하면 이러한 기능을 구현할 수 있다.

  • 공간 확장의 세가지 기능

    • 공간 데이터를 저장할 수 있는 데이터 타입
    • 공간 데이터의 검색을 위한 공간 인덱스(R-Tree 알고리즘)
    • 공간 데이터의 연산 함수(거리 또는 포함 관계의 처리)

구조 및 특성

  • 데이터 타입
    • POINT
    • LINE
    • POLYGON
    • GEOMETRY : GEOMETRY 타입은 나머지 세개 타입의 슈퍼 타입으로, 다른 타입의 객체를 모두 저장할 수 있다.

  • MBR이란 도형을 감싸는 최소 크기의 사각형을 의미한다. 이 사각형들의 포함 관계를 B-Tree 형태로 구현한 인덱스가 R-Tree 인덱스다.

R-Tree 인덱스의 용도

  • R-Tree는 MBR 정보를 이용해 B-Tree 형태로 인덱스를 구축하므로 공간 인덱스라고도 한다.
  • 일반적으로 위도,경도,좌표 저장에 주로 사용된다.

전문 검색 인덱스

  • MySQL의 B-Tree 인덱스는 실제 컬럼이 1MB이더라도 전체 값을 인덱스 키로 사용하는 것이 아니라, 1000 바이트 또는 3072바이트 까지만 잘라서 인덱스 키로 사용한다.

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

  • 문서 내용 전체를 인덱스화해서 특정 키워드가 포함된 문서를 검색하는 전문(Full Text) 검색에는 일반적인 B-Tree 인덱스를 사용할 수 없다.

  • 문서 전체에 대한 분석과 검색을 위한 인덱싱 알고리즘을 전문 검색 인덱스라고 한다.


인덱스 알고리즘

  • 전문 검색에서는 문서 본문의 내용에서 사용자가 검색할 키워드를 분석해 내고, 이를 빠른 검색용으로 사용할 수 있게 인덱스를 구축한다.

어근 분석 알고리즘

  • MySQL의 전문 검색 알고리즘은 다음 두 가지 중용한 과정을 거쳐서 인덱싱 작업을 한다.

  • 불용어 처리(Stop word)
    • 검색에서 별 가치가 없는 단어를 모두 필터링해서 제거하는 작업
    • 모두 상수로 정의해서 사용하는 경우가 많고, 데이터베이스화해서 사용자가 추가하거나 삭제할 수 있게 구현하는 경우도 있다.

  • 어근 분석
    • 검색어로 선정된 단어의 뿌리인 원형을 찾는 작업이다.
    • MySQL에서는 형태소 분석 라이브러리인 MeCab을 플러그인 형태로 사용할 수 있게 지원한다.
    • MeCab을 MySQL 서버에 적용하는 방법은 어렵지 않지만 한글에 맞게 완성도를 갖추는 작업은 많은 시간과 노력이 필요하다.

n-gram 알고리즘

  • MeCab을 위한 형태소 분석은 매우 전문적인 전문 검색 알고리즘이어서 만족할 만한 결과를 내려면 많은 시간과 노력이 필요하다.

  • n-gram은 단순히 키워드를 검색해내기 위한 인덱싱 알고리즘이라서 보다 범용적으로 사용할 수 있다.

  • 본문을 무조건 몇 글자씩 잘라서 인덱싱하는 방법이다.

  • n-gram에서 n은 인덱싱할 키워드의 최소 글자 수를 의미하는데, 일반적으로 2글자 단위로 키워드를 쪼개서 인덱싱하는 2-gram 방식이 많이 사용된다.


불용어 변경 및 삭제

  • 전문 검색 인덱스의 불용어 처리 무시
    • 스토리지 엔진에 관계없이 MySQL 서버의 모든 전문 검색 인덱스에 대해 불용어를 완전히 제거하는 방법

전문 검색 인덱스의 가용성

  • 전문 검색 인덱스의 사용
  • 쿼리 문장이 전문 검색을 위한 문법(MATCH ~ AGAINST ~)을 사용해야 한다.
  • 테이블이 전문 검색 대상 컬럼에 대해서 전문 인덱스를 보유해야 한다.

0개의 댓글