2

데이터베이스 사용 postgresql 9.5.파티션 테이블이있는 최대 절전 모드

은 내가 .This이 column 날짜에 (지금까지 240 개 분할 된 테이블, 즉 년 12 월 2020 년 1 월 2000) 20 년 동안 달에이 테이블을 분할 한 그래서 삽입을 개선하기 위해, 행 110,966,498있는 테이블 employee_shift이 테이블에. 내 삽입이 빠른 (기본 쿼리에 의해 수행)되지만 기존 DAO 층이 때문에 내 선택 문이다 상대적으로 훨씬 느린가에 확인하기 때문에 오히려 employee_shift_2010_10 타격보다 employee_shift 테이블 안타 HQL을 (year_month), 사용 이제

모든 파티션.

date 열을 사용하여 select 문을 사용하는 경우 최대 절전 모드가 직접 employee_shift_2010_10에 도달 할 수 있습니까?

이 경우 더 빨리 선택 항목을 만들 수있는 다른 옵션은 무엇입니까?

답변

1

아마도 상속 된 테이블에 대한 제약 조건을 설정하지 않았거나 매개 변수 쿼리를 사용했을 것입니다.

CREATE TABLE a (id serial PRIMARY KEY, ts timestamp); 
CREATE INDEX a_ts ON a (ts); 

CREATE TABLE a_2010 (CONSTRAINT data_2011_check CHECK (ts >= '2010-01-01 00:00:00'::timestamp AND ts < '2011-01-01 00:00:00'::timestamp)) INHERITS (a); 
CREATE TABLE a_2011 (CONSTRAINT data_2012_check CHECK (ts >= '2011-01-01 00:00:00'::timestamp AND ts < '2012-01-01 00:00:00'::timestamp)) INHERITS (a); 
CREATE TABLE a_2012 (CONSTRAINT data_2013_check CHECK (ts >= '2012-01-01 00:00:00'::timestamp AND ts < '2013-01-01 00:00:00'::timestamp)) INHERITS (a); 
CREATE TABLE a_2013 (CONSTRAINT data_2014_check CHECK (ts >= '2013-01-01 00:00:00'::timestamp AND ts < '2014-01-01 00:00:00'::timestamp)) INHERITS (a); 
CREATE INDEX a_ts_2010 ON a_2010 (ts); 
CREATE INDEX a_ts_2011 ON a_2011 (ts); 
CREATE INDEX a_ts_2012 ON a_2012 (ts); 
CREATE INDEX a_ts_2013 ON a_2013 (ts); 

그런 다음 postgresql이 상속 된 테이블을 제약 조건별로 확인합니다. 구속 조건은 겹쳐서는 안됩니다.

EXPLAIN ANALYZE SELECT * FROM a WHERE ts = '2011-02-01 00:00:00'; 


                 QUERY PLAN               
------------------------------------------------------------------------------------------------------------------------- 
Append (cost=0.00..14.79 rows=11 width=12) (actual time=0.006..0.006 rows=0 loops=1) 
    -> Seq Scan on a (cost=0.00..0.00 rows=1 width=12) (actual time=0.003..0.003 rows=0 loops=1) 
     Filter: (ts = '2011-02-01 00:00:00'::timestamp without time zone) 
    -> Bitmap Heap Scan on a_2011 (cost=4.23..14.79 rows=10 width=12) (actual time=0.003..0.003 rows=0 loops=1) 
     Recheck Cond: (ts = '2011-02-01 00:00:00'::timestamp without time zone) 
     -> Bitmap Index Scan on a_ts_2011 (cost=0.00..4.23 rows=10 width=0) (actual time=0.003..0.003 rows=0 loops=1) 
       Index Cond: (ts = '2011-02-01 00:00:00'::timestamp without time zone) 
Planning time: 1.148 ms 
Execution time: 0.046 ms 
(9 rows)