2

Использование базы данных postgresql 9.5.Спящий режим с секционированным столом

У меня есть таблица employee_shift с рядами , так чтобы улучшить вставки я распределял эту таблицу по месяцам в течение 20 лет (январь 2000 года по декабрю 2020 т.е. 240 секционированных таблиц до сих пор) .Это на column даты в таблице.

Теперь, когда мои вставки быстрее (сделаны родным запрос), но мой существующий DAO слой с помощью HQL, который ударяет employee_shift таблицу, а не удар employee_shift_2010_10 (year_month), поэтому мои выберите заявления относительно гораздо медленнее, потому что он проверяет в все разделы.

Есть ли способ, с помощью которого спящий режим может напрямую попасть в employee_shift_2010_10, если я использую операторы select с использованием столбца date?

Каковы мои другие варианты, чтобы сделать мой выбор быстрее в этом случае?

ответ

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) 
Смежные вопросы