본문 바로가기
DB

검색기능을 text index로 사용해보자

by brilliant-growth 2024. 5. 29.

 

전통적인 검색 기능은 like 를 사용하여 검색을 이용했음

허나 데이터가 많아지면 성능 저하가 생김

like는 풀스캔을 하기때문에

 

이를 대체하고자 나온게 text index임 밑에는 mysql과 oracle에서 사용하는 방법을 간단하게 나타냄

 

Mysql은 FULLTEXT을 이용 5.7이상 InnoDB(MariaDB) 또는 MylSAM(Mysql) 

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    body TEXT,
    FULLTEXT (title, body)
); //테이블 생성시 text index 설정

ALTER TABLE articles ADD FULLTEXT(title, body);
//기존 테이블에서 추가하는 방법

SELECT * FROM articles
WHERE MATCH(title, body) AGAINST('search term');
//사용 방법 MATCH ... AGAINST 구문을 사용하여 텍스트 검색해야함

 

Oracle은 Oracle Text을 이용 Oracle 11g이상이면 기본설정 안되어 있으면 별도로 설치

 

CREATE TABLE articles (
    id NUMBER PRIMARY KEY,
    title VARCHAR2(255),
    body CLOB
);

// 텍스트 인덱스 생성
CREATE INDEX articles_text_idx
ON articles(body)
INDEXTYPE IS CTXSYS.CONTEXT;

// Oracle Text 방식으로 조회
select count(*) from articles where CONTAINS (text, '%아름다웠%') > 0;

//기본 인덱스 생성 방법
CREATE INDEX articles_idx
ON articles(body);

select count(*) from articles where text like '%아름다웠%';

 

Oracle Text 에서는 contains()라는 함수를 사용해야한다

'DB' 카테고리의 다른 글

외래키에 관하여  (0) 2024.11.29
Statement와 PreparedStatement  (0) 2024.05.30
수정 삭제가 잦은 컬럼에 index가 적합하지 않은 이유  (0) 2024.05.30
index를 사용하지 못하는 경우  (0) 2024.05.30
Transaction이란?  (1) 2023.11.24