我需要知道表中的行数来计算百分比。如果总数大于某个预定义的常量,我将使用常量值。否则,我将使用实际的行数。
我可以使用SELECT count(*) FROM表。但是,如果我的常量值是500,000,并且我的表中有5,000,000,000行,计算所有行将浪费大量时间。
是否有可能在我的常数值被超过时就停止计数?
我需要精确的行数,只要它低于给定的限制。否则,如果计数超过极限,我将使用极限值,并希望尽快得到答案。
就像这样:
SELECT text,count(*), percentual_calculus()
FROM token
GROUP BY text
ORDER BY count DESC;
我曾经在postgres应用程序中运行:
EXPLAIN SELECT * FROM foo;
然后用正则表达式或类似的逻辑检查输出。对于一个简单的SELECT *,输出的第一行应该是这样的:
Seq Scan on uids (cost=0.00..1.21 rows=8 width=75)
您可以使用rows=(\d+)值作为将返回的行数的粗略估计,然后仅在估计值小于1.5倍阈值(或您认为对应用程序有意义的任何数字)时执行实际的SELECT COUNT(*)。
根据查询的复杂程度,这个数字可能会越来越不准确。事实上,在我的应用程序中,当我们添加连接和复杂条件时,它变得非常不准确,甚至不知道在100的幂范围内我们会返回多少行,所以我们不得不放弃这种策略。
但是,如果您的查询足够简单,Pg可以在合理的误差范围内预测它将返回多少行,那么它可能适合您。