我试图测量查询的执行时间,但我有一种感觉,我的结果是错误的。执行时间select * vs select count(*)
之前每个查询我执行:sync; echo 3 > /proc/sys/vm/drop_caches
我的服务器日志文件的结果是:
2014-02-08 14:28:30 EET LOG: duration: 32466.103 ms statement: select * from partsupp
2014-02-08 14:32:48 EET LOG: duration: 9785.503 ms statement: select count(*) from partsupp
不宜select count(*)
采取更多的时间执行,因为它使更多的操作?
要输出select *
的所有结果,我需要4分钟(不是32秒,如服务器日志所示)。我知道客户端必须输出大量数据,而且速度会很慢,但服务器的日志呢?它是否也计算输出操作?
我也用explain analyze
,结果(如预期):
select *: Total runtime: 13254.733 ms
select count(*): Total runtime: 13463.294 ms
我已经跑了很多次,结果是相似的。
日志措施到底是什么?
为什么这么大select *
查询在explain analyze
和服务器日志之间的差异,尽管它不计算I/O操作?
对数测量和解释分析有什么区别?
我有一个Ubuntu 12.04和PostgreSQL 9.1的专用服务器
谢谢!
'count(*)'返回的信息较少。大多数关系型数据库不得不为较少的信息做更少的工作。它使用查询计划以最少的工作量提供所需的信息。 – usr
出于实用目的,选择count(*)将更快,因为它只向调用数据的应用程序返回一行。 –
@DanBracuk如果您正在测量客户端的执行时间,并且没有通过计时直到* first *行返回,而是解释分析报告*服务器端*执行时间来纠正该错误,则为真。 –