我猜答案是肯定的,但在Postgres中有没有办法找到返回的结果数比运行整个查询更快?换句话说,如果你有一个需要很长时间的查询,如果你只想知道返回的行数,它可以更快地完成吗?
答案 0 :(得分:2)
不确定它是否会为您提供您所追求的改进规模,但select count()
总是比select some fields
查询更快,因为结果集不必返回客户。
服务器仍然需要经历整个选择过程,因此部分操作将花费完全相同的时间。简而言之,当查询更复杂或结果集非常短时,使用count()
获胜的时间会减少。
我希望这是有道理的......
另一方面,如果您担心查询的执行时间,那么您的第一站应始终为EXPLAIN(也可在pgAdminIII中以高度可视的形式提供,正如所解释的那样{ {3}})
答案 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 [一堆字段]。