获取PostgreSQL查询的执行时间

获取PostgreSQL查询的执行时间,sql,performance,postgresql,Sql,Performance,Postgresql,PostgreSQL不是Transact-SQL。这是两件稍有不同的事情 在PostgreSQL中,这将与 sql:/home/an/Desktop/dbms/query.sql:9: ERROR: syntax error at or near "@" LINE 1: DECLARE @StartTime datetime,@EndTime datetime 另一方面,测量查询时间不必如此复杂。有更好的方法: 中有一个\timing功能,用于测量客户端的查询时间(类似于SQLServerM

PostgreSQL不是Transact-SQL。这是两件稍有不同的事情

在PostgreSQL中,这将与

sql:/home/an/Desktop/dbms/query.sql:9: ERROR:  syntax error at or near "@"
LINE 1: DECLARE @StartTime datetime,@EndTime datetime
另一方面,测量查询时间不必如此复杂。有更好的方法:

  • 中有一个
    \timing
    功能,用于测量客户端的查询时间(类似于SQLServerManagementStudio右下角的持续时间)

  • 可以(对于每个查询,或者仅当其持续时间超过X毫秒时)执行

  • 可以使用以下命令收集任何单个语句的服务器端计时:


  • 衡量执行时间的方法多种多样,各有利弊。但无论你做什么,一定程度上的“测量问题”都是适用的。也就是说,测量本身可能会扭曲结果

    1.
    解释分析
    您可以使用prepend报告整个查询计划,其中包含实际测量的估计成本时间。查询实际执行(具有所有副作用,如果有!)。适用于
    选择
    插入
    更新
    删除

    检查我对您的查询的修改版本是否实际上更快:

    解释分析
    在.name上选择不同的born\u
    从born_到b
    
    其中日期'2012-01-30'-b.dob如果您指的是psql,而不是您正在编写的某些程序,请使用
    \?
    获取帮助,请参阅:

    EXPLAIN (ANALYZE, COSTS OFF, TIMING OFF)
    
    然后得到如下输出:

    \timing [on|off]       toggle timing of commands (currently off)
    

    我在我的SQL studio上测试了这个查询,只是在我的数据库中用一些东西替换了你的
    select distinct…
    ,它工作得很好。你用什么来执行这个查询?我在postgres中运行上面的查询!!:-/你到底想做什么?这似乎与Java或JDBC没有任何关系(从你的评论来看,甚至与MySql都没有关系).这是一个存储过程吗?MySQL和PostgreSQL是非常不同的东西(好像比较Teradata和Oracle来访问)。如果您使用的是PostgreSQL,那么您应该删除MySLQ标志:)@zyxwvu:那么,为什么在一个针对PostgreSQL但使用Microsoft SQL语法的问题中包含MySQL标记?您收到的错误消息是MySQL错误,而不是PostgreSQL错误。仅供参考\timing@filiperm最佳定义
    Delta
    double-precision
    Th感谢Ank为这个问题的标题提供了简单的基本答案。我认为这是在postgres中显示时间最直接、最简单的方法。谢谢!这显示了服务器端时间还是客户端(延迟)?文档对此只字未提。@CrouchingKitten我在非常慢的互联网上进行了测试,得到了“0.261毫秒”“使用本地unix域套接字连接,以及”944.272 ms“:D通过TCP使用psql的慢速internet。因此它只能是客户端。@cruchingkitten:client-side-与
    EXPLAIN ANALYZE
    报告的总执行时间相反,它在服务器上测量(没有网络延迟)。
    EXPLAIN (ANALYZE, BUFFERS) YOUR QUERY HERE;
    
    EXPLAIN (ANALYZE, COSTS OFF, TIMING OFF)
    
    \timing [on|off]       toggle timing of commands (currently off)
    
    # \timing on
    Timing is on.
    
    # select 1234;        
     ?column? 
    ----------
         1234
    (1 row)
    
    Time: 0.203 ms