在我的项目中,我经常需要通过其ID查询许多行。我做的查询如下:
select * from mytable where id in (...)
问题是,这些查询对我来说太慢了。我的桌子有大约3M行,当我要求这样的150个ID时,它需要大约3.5秒。
运行explain
表明这实际上贯穿整个表格:
Seq Scan on mytable (cost=0.00..762403.70 rows=150 width=794)
Filter: (id = ANY ('{...}'::bigint[]))
如何更改此内容?
答案 0 :(得分:1)
结果很简单。正如@marcosh所建议的那样,id
列不是索引。所以我做了:
ALTER TABLE mytable ADD PRIMARY KEY (id);
......现在它快得多。以下是explain
现在所说的内容:
Index Scan using mytable_pkey on mytable (cost=0.61..653.66 rows=150 width=794)
Index Cond: (id = ANY ('{...}'::bigint[]))