在postgresql中优化日期查询

时间:2016-05-03 14:26:30

标签: postgresql date indexing postgresql-9.4 postgresql-performance

我很难在一张非常大的桌子上优化查询。基本上所有这些都按日期过滤结果集:

SELECT FROM bigtable WHERE date >= '2015-01-01' AND date <= '2016-01-01' ORDER BY date desc;

添加以下日期索引实际上会让事情变得更糟:

CREATE INDEX CONCURRENTLY bigtable_date_index ON bigtable(date(date));

也就是说,如果没有索引,运行大约需要1秒,运行它需要大约10秒。但是对于更大的范围和过滤,即使没有该索引也会非常缓慢。

我正在使用postgresql 9.4,我看到9.5对排序有一些改进可能会有所帮助吗?

在这种情况下,BRIN索引应该有用吗?

1 个答案:

答案 0 :(得分:0)

要使索引有效,它需要索引您要过滤的相同内容。在这种情况下,您按date进行过滤,但您似乎已编入索引date(date),因此无法使用该索引。

使用date(date)过滤您的表格:

SELECT FROM bigtable
WHERE date(date) >= '2015-01-01' AND date(date) <= '2016-01-01'
ORDER BY date(date) desc;

或者为裸date索引:

CREATE INDEX CONCURRENTLY bigtable_date_index ON bigtable(date);