안녕하세요. 대용량 데이터 검색방안 때문에 문의 드립니다.
현재 테스트 데이터로 3백만건 정도 insert가 되어있으며
body라는 varchar2 (4000)에서 단어 검색을 합니다. 여기 Full text search를 위해 body_vector 라는 tsvector 라는 형으로 별도의 필드도 생성하여 저장합니다
당연히 처리비용이 많이 들거라고 생각은 들지만요..
테스트 테이블은
create table test_table
(
row_id character varying(45) NOT NULL,
attrib_1 character varying(300),
attrib_2 character varying(360),
attrib_3 character varying(150),
attrib_4 character varying(150),
attrib_5 character varying(150),
body character varying(4000),
body_vector tsvector ,
reg_time timestamp ,
CONSTRAINT test_table_pkey PRIMARY KEY (row_id)
그리고 index로 gin 인덱스를 사용하여
CREATE INDEX ix_test_table_body_vector ON test_table USING gin(body_vector);
를 합니다.
쿼리는
select attrib_1 , attrib_2 , attrib_3 , attrib_4 , attrib_5 , count(row_id) from test_Table
where reg_time between '2013-06-01 00:00:00.000000'::timestamp and '2013-06-30 00:00:00.000000'::timestamp
and body_vector @@ to_tsquery('불량:*')
group by attrib_1 , attrib_2 , attrib_3 , attrib_4 , attrib_5
인데요
이렇게 대용량일 경우 빠르게 쿼리할 방안이 또 있을까요?
물론 파티셔닝도 생각해 보고 있지만..일별로 파티셔닝하지 않는한은 용량이 커집니다.
|