1

我猜答案是否定的,但在 Postgres 中有没有办法找到比运行整个查询更快的返回结果数量?换句话说,如果您的查询需要很长时间,如果您只想知道返回的行数,是否可以更快地完成?

4

4 回答 4

2

不确定它是否会给您带来您所追求的改进规模,但 aselect count()总是比select some fields查询快,因为结果集不必返回给客户端。

但是,服务器仍然需要完成整个选择过程,因此部分操作将花费完全相同的时间。简而言之,count()当查询更复杂或结果集很短时,您赢得的时间会减少。

我希望这是有道理的...

另一方面,如果您担心查询的执行时间,您的第一站应该始终是EXPLAIN(也可以在pgAdminIII中以高度可视化的形式提供,如此所述)

在此处输入图像描述

于 2012-09-27T23:08:44.760 回答
2

count()是准确的,但出了名的慢,因为它必须验证行是否仍然存在。PostgreSQL 9.2 中新的仅索引扫描是个例外——在最佳条件下并且如果有合适的索引可用。

如果您的查询从表中检索所有行
并且您的统计信息是最新的
并且您的结果不必是 100% 准确的(自上次以来的更改ANALYZE),则有一个更快的快捷方式:

SELECT reltuples::bigint AS estimate
FROM   pg_class
WHERE  oid = 'myschema.mytable'::regclass;

此相关答案中的更多详细信息:

否则,count(*)是你最好的选择。不要忘记删除所有其他SELECT项目和ORDER BY.

于 2012-09-28T01:03:34.363 回答
0

看看count()函数:http ://www.postgresql.org/docs/8.2/static/functions-aggregate.html

于 2012-09-27T23:05:58.280 回答
0

是的,使用 SELECT COUNT(*) 而不是 SELECT [一堆字段]。

于 2012-09-27T23:06:12.527 回答