整数列是否包含值

时间:2013-12-01 05:50:17

标签: sql performance postgresql

关于检查整数列是否包含特定值的性能方法,最快的是什么?

我在postgresql 8.4中有一个包含1000万行的表。我需要每秒至少进行10000次检查。 目前我正在进行查询SELECT id FROM table WHERE id = my_value,然后检查DataReader是否有行。但它很慢。有没有办法加速而不将整列加载到内存中?

3 个答案:

答案 0 :(得分:0)

您可以选择COUNT

SELECT COUNT(*) FROM table WHERE id = my_value

它只返回一个整数值 - 与您的选择条件匹配的行数。

答案 1 :(得分:0)

你需要两件事,

正如Marcin指出的那样,如果您需要的是知道多少,您想使用COUNT(*)。您还需要该列的索引。索引的答案就在眼前。如果没有索引,Postgresql仍然需要遍历整个表来计算一个数字。

CREATE INDEX id_idx ON table (id) ASC NULLS LAST;

某种东西应该让你到那里。是否足以运行查询10,000 /秒。将取决于你的硬件...

答案 2 :(得分:0)

如果您使用where id = X,则会返回与X匹配的所有值。假设1000值与X匹配,则会返回1000个值。

现在,如果您只想检查该值是否至少一次,那么在匹配第一个值之后,则无需处理另一个999。即使你计算了你仍在经历所有这些值的值。

在这种情况下我会做的是:

SELECT 1 FROM table
WHERE id = my_value
LIMIT 1

请注意,我甚至没有返回id本身。所以,如果你得到一条记录,那么价值就在那里。

当然,为了改进此查询,请确保您在id列上有索引。