有没有办法找到返回的结果数比运行整个查询更快

时间:2012-09-27 23:04:11

标签: sql postgresql

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

4 个答案:

答案 0 :(得分:2)

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

服务器仍然需要经历整个选择过程,因此部分操作将花费完全相同的时间。简而言之,当查询更复杂或结果集非常短时,使用count()获胜的时间会减少。

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

另一方面,如果您担心查询的执行时间,那么您的第一站应始终为EXPLAIN(也可在pgAdminIII中以高度可视的形式提供,正如所解释的那样{ {3}})

enter image description here

答案 1 :(得分:2)

count()确切,但是出了名的慢,因为它必须验证行仍然存在。例外情况是PostgreSQL 9.2中的新 index-only scan - 在最佳条件下以及是否有合适的索引。

如果您的查询从表中检索所有行 您的statistics are up to date
您的结果不必100%准确(自上次ANALYZE以来的更改),快捷方式更快:

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

此相关答案中的更多详情:

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

答案 2 :(得分:0)

答案 3 :(得分:0)

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