티스토리 뷰

반응형

Sphinx 엔진의 한계

스핑크스를 사용하면서 가장 중요한 한계점을 발견하였는데
이미 인덱싱 처리가 되어있는 Sphinx 테이블간의 데이터 활용을 위한
Join / Subquery / Union 쿼리가 지원되지 않는다는 점이다.

SphinxQL support for inner join on the same index with subquery

[일부 쿼리를 지원하지 않는 근본적 이유]

  • 검색 엔진 최적화:
    Sphinx는 주로 텍스트 검색을 위해 최적화된 검색 엔진이며 복잡한 SQL 기능보다는 고속의 텍스트 검색 및 인덱싱이 목적이기 때문이다.

  • 데이터 저장 및 인덱싱
    Sphinx는 데이터를 자체적인 인덱스 파일 형식으로 저장하고 관리하며 인덱스 파일은 MySQL의 테이블 구조와 다르다.

  • 단일 테이블 기반 검색
    Sphinx는 단일 테이블 기반의 검색을 주로 지원하며, 이는 빠른 검색 속도를 유지하기 위한 것입니다.

  • 복잡성 감소
    데이터베이스 엔진의 복잡성이 크게 증가를 막기 위해 다중 테이블 쿼리는 지원하지 않음

정리하면 빠르게 값을 찾기위한 색인(Indexing) 방식을 통해 복잡했던 다중 테이블 연산 방식을 포기하고
속도 개선을 위한 인덱싱 처리에만 집중한 것으로 보인다.

여러 테이블을 다루어야하는 경우에는?

Sphinx 테이블이 생성되기 위해서는 대상 테이블을 인덱싱하는 과정을 지나야한다.
sphinx.conf 파일에서 sph_{TableName}을 선언하고 원하는 테이블의 형태를 구현할 수 있는데
인덱싱을 위해서는 테이블을 호출해야하는데 해당 단계 까지는 Mysql | MariaDB | Nosql 등 DB에서 사용해왔던 쿼리는 모두 사용가능하다.

즉, A | B 테이블을 결합을 원한다면 인덱싱 과정에서 Query를 실행시켜 sphinx테이블을 생성해야 한다는 것이다.

source sph_test{
        type = mysql

    ... 생략

        sql_query = 
        SELECT b.idx, a.join_key, a.n_date, a.n_time, a.m_cd, a.h_cd, a.img_chk, a.vod_chk, a.r_date, b.title, b.content 
        FROM SEARCH_YTN as a 
        JOIN SEARCH_YTN_EN as b ON a.join_key = b.join_key

    ... 생략
}
반응형

'DataBase' 카테고리의 다른 글

[work 기록장] 반복되는 컬럼 개선  (0) 2023.06.16
SUBQUERY와 JOIN 무엇을 선택해야할까?  (0) 2023.03.15
스핑크스 SQL의 특징과 문제점  (0) 2022.10.18
Common Table Expression  (0) 2022.09.17
DB 암호화 기법  (1) 2022.09.16
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함