在一些非常大的表上,最常见的索引之一是日期字段(例如插入日期或操作日期)。 但是当表格非常大时,指数往往也会很大。
我以为我可以在桌面上为每个月创建一个部分索引,这样“当前”月份的查询会更快。
离。
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,它是这个版本的部分索引的限制吗?或者我还有其他方式来写它吗?