关于检查整数列是否包含特定值的性能方法,最快的是什么?
我在postgresql 8.4中有一个包含1000万行的表。我需要每秒至少进行10000次检查。
目前我正在进行查询SELECT id FROM table WHERE id = my_value
,然后检查DataReader
是否有行。但它很慢。有没有办法加速而不将整列加载到内存中?
答案 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
列上有索引。