아무리 해봐도 쿼리 성능이 나오지 않아 도움을 요청하고자 합니다.
현재 PostgreSQL 9.0 을 사용중이구요..
하나의 테이블이 데이터가 너무 많아서 테이블 파티션을 했습니다.
create table table_20101001 (
check(to_char(to_timestamp(date_col / 1000), 'yyyy-mm-dd') = '20101001')
) inherits(master_table);
check 구문을 위와 같이 했던건 date_col 이라는 컬럼이 bigint 형인데,
어떤 문서를 보니 bigint형은 check 제약조건에 걸리지 않는다고 해서 char 타입으로
변경하고자 했던거구요...
아래와 같이 rule을 생성했고요...
create rule rule_20101001 as
on insert to master_table where
(to_char(to_timestamp(issued_date / 1000), 'yyyy-mm-dd') = '20101001')
do instead insert into table_20101001 values (NEW.*);
각 파티션 테이블별 인덱스도 생성했습니다.
CREATE INDEX idx_table_20101001 ON table_20101001
(name_col, date_col);
이렇게 해놓고 며칠동안 놔두면...(예를 들어 3일)
master_table, table_20101001, table_20101002, table_20101003
이렇게 파티션 테이블은 생성이 잘됩니다.
그러면 각 테이블별로 5천만건씩 있다고 치고, 총 데이터 1억 5천만건 정도겠네요...
검색을 할 때...
일반적으로 검색하듯이
select name_col, date_col
from master_table
where name_col = 'abc'
and date_col between 1288486620000 and 1288573020000
이렇게 하면 되는건가요? 데이터가 별로 없을 때는 위와 같이 해도 나오는데요...
이게 파티션에 대한 성능이 제대로 발휘되는건지 아닌지...
데이터가 쌓이기 시작하면 파티션 했을때나 안했을 때나 별 차이가 없네요...
아니면 테이블을 파티션한 것들은 검색할 때 뭔가 다른 방법이 있는건지요..
혹시 파티션 만들때는 char 타입으로 변환을 해서 검색시 bigint랑 맞지 않아
파티션한 효과를 전혀 못보는건 아닌지...
뭔가 방법이 없을까요? 알려주시면 고맙겠습니다.
|