我猜答案是否定的,但在 Postgres 中有没有办法找到比运行整个查询更快的返回结果数量?换句话说,如果您的查询需要很长时间,如果您只想知道返回的行数,是否可以更快地完成?
问问题
112 次
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
于 2012-09-27T23:05:58.280 回答
0
是的,使用 SELECT COUNT(*) 而不是 SELECT [一堆字段]。
于 2012-09-27T23:06:12.527 回答