Postgresql部分索引日期查询子期间

时间:2015-03-23 22:15:00

标签: postgresql date indexing partial postgresql-9.3

在一些非常大的表上,最常见的索引之一是日期字段(例如插入日期或操作日期)。 但是当表格非常大时,指数往往也会很大。

我以为我可以在桌面上为每个月创建一个部分索引,这样“当前”月份的查询会更快。

离。

CREATE TABLE test_index_partial
(
  exint1 integer,
  exint2 integer,
  exdatetime1 timestamp without time zone
);

CREATE INDEX part_date_201503
  ON test_index_partial USING btree
  (exdatetime1)
  WHERE exdatetime1 >= '20150301 000000' and exdatetime1 < '20150401 000000' ;

对于我的测试,我用一个表格提供了以下指令:

INSERT INTO test_index_partial SELECT sint1, sint2, th 
from generate_series(0, 100, 1) sint1, 
generate_series(0, 100, 1) sint2,
generate_series(date_trunc('hour', now()) - interval '90 day', now(), '1 day') th ;

当我使用确切条件执行选择时,它使用部分索引。但是在日期字段上创建'all_dates'索引而不是部分后,它会优先于整个索引。

我想要的是:如果我选择更短的时间段(例如,五天时间段),我希望postgresql获得更多的指数。在我的例子中:我希望他在所有表中选择月份索引而不是整个索引。 但似乎Postgresql不假设条件:

exdatetime1 >= '20150310 000000' and exdatetime1 <'20150315 000000'

包含在索引

的条件中
exdatetime1 >= '20150301 000000' and exdatetime1 <'20150401 000000'

我使用postgresql 9.3,它是这个版本的部分索引的限制吗?或者我还有其他方式来写它吗?

0 个答案:

没有答案