如何通过id优化查询多行?

时间:2015-03-23 11:10:39

标签: postgresql sql-optimization postgresql-performance

在我的项目中,我经常需要通过其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[]))

如何更改此内容?

1 个答案:

答案 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[]))