Postgres索引2列条件

时间:2017-02-14 15:15:07

标签: postgresql indexing postgresql-9.4

给定一个商店表(~10k记录)和一个时间表(约200k记录),我正在尝试为计划者创建和索引,但到目前为止它忽略了它。

select * from stores str
   inner join schedule sch on sch.store_id = str.store_id
where sch.open is true and sch.tables > 0

create index sch_open_tables_idx on schedule(open, tables) where open is true and tables > 0

有没有正确的方法呢?

2 个答案:

答案 0 :(得分:1)

您需要的索引是:

create index sch_open_tables_id on schedule(store_id)
where open and tables > 0;

store_id可能是stores表上的主键,因此已有索引。如果不是:

create index store_id on stores(store_id);

答案 1 :(得分:0)

这些是2个表,所以使用2个索引 - 每个索引一个,无论如何这样的小表不应该需要部分索引

EXPLAIN select * from stores str
   inner join schedule sch USING (store_id)
where sch.open is true and tables > 0;

create index sch_open_idx on schedule(store_id) where open is true;
create index str_tables_idx on stores(store_id) where tables > 0;

vacuum analyze stores;
vacuum analyze schedule;

EXPLAIN select * from stores str
   inner join schedule sch USING (store_id)
where sch.open is true and tables > 0;