部分索引未在psql 8.2中使用

时间:2013-08-15 04:49:24

标签: postgresql postgresql-8.2

我想在大表上运行查询:

  

SELECT DISTINCT用户FROM任务   WHERE ctime> ='2012-01-01'AND ctime< '2013-01-01'AND parent IS NULL;

已经有一个关于任务的索引(ctime),但是大多数(75%)的行都有一个非NULL父级,所以这不是很有效。

我尝试为这些行创建部分索引:

  

CREATE INDEX CONCURRENTLY task_ctu_np ON任务(ctime,user)    父级IS NULL;

但查询计划程序继续选择任务(ctime)索引而不是我的部分索引。

我在服务器上使用postgresql 8.2,而我的psql客户端是8.1。

1 个答案:

答案 0 :(得分:1)

首先,我理解第二个理查德的建议,即升级应该是您的首要任务。据我所知,部分指数等领域自8.2以来有显着改善。

第二件事是你真的需要带有时间信息(EXPLAIN ANALYZE)的实际查询计划,因为没有这些我们就不能谈论选择性等。

因此,如果我是你的话,我的业务订单将首先升级 ,然后再调整。

现在,我知道8.3是一个很大的升级(它是唯一一个导致我们在LedgerSMB中出现问题的人)。您可能需要一些时间来解决这个问题,但另一种方法是进一步落后,并随着时间的推移对当前理解中越来越少的版本提出问题。