给定一个商店表(~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
有没有正确的方法呢?
答案 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;