2012-01-30 34 views
16
DECLARE @StartTime datetime,@EndTime datetime 

SELECT @StartTime=GETDATE() 

select distinct born_on.name 
from born_on,died_on 
where (FLOOR(('2012-01-30'-born_on.DOB)/365.25) <= (
    select max(FLOOR((died_on.DOD - born_on.DOB)/365.25)) 
    from died_on, born_on 
    where (died_on.name=born_on.name)) 
    ) 
and (born_on.name <> All(select name from died_on)) 

SELECT @EndTime=GETDATE() 

SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in millisecs] 

私は質問時間を得ることができません。代わりに、次のエラーが表示されます。PostgreSQLクエリの実行時間を取得

sql:/home/an/Desktop/dbms/query.sql:9: ERROR: syntax error at or near "@" 
LINE 1: DECLARE @StartTime datetime,@EndTime datetime 
+0

を、私はこれをテスト私のSQLスタジオであなたの 'select distinct ... 'を私のDBの中のものに置き換えるだけで、うまくいきました。このクエリを実行するためにあなたは何を使用していますか? –

+0

上記のクエリをpostgresで実行しています! : -/ –

+0

あなたは正確に何をしようとしていますか?これは、JavaやJDBC(とMySqlでさえもあなたのコメントから)とはまったく関係していないようです。これはストアドプロシージャですか? – pcalcao

答えて

44

第三に、それはEXPLAINを使用して、任意の単一のステートメントのサーバー側のタイミングを収集することが可能です。

あなたはより速く、実際には、クエリの私のようになったバージョンがあるかどうかを確認するために、このようにそれを使用することができます:

EXPLAIN ANALYZE 
SELECT DISTINCT born_on.name 
FROM born_on b 
WHERE floor(('2012-01-30'::date - b.dob)/365.25) <= (
    SELECT floor((max(d1.dod - b1.dob)/365.25)) 
    FROM born_on b1 
    JOIN died_on d1 USING (name) 
    ) 
AND NOT EXISTS (
    SELECT * 
    FROM died_on d2 
    WHERE d2.name = b.name 
    ); 

は、クエリプランに加えて、合計実行時間を表示します。アーティファクトを除外するために数回実行します。
couple of optionsが利用可能です。

30

PostgreSQLはTransact-SQLではありません。これらは2つのわずかに異なるものです。 PostgreSQLの

、これは一方

DO $proc$ 
DECLARE 
    StartTime timestamptz; 
    EndTime timestamptz; 
    Delta interval; 
BEGIN 
    StartTime := clock_timestamp(); 
    PERFORM YOUR QUERY HERE; 
    EndTime := clock_timestamp(); 
    Delta := 1000 * (extract(epoch from EndTime) - extract(epoch from StartTime)); 
    RAISE NOTICE 'Duration in millisecs=%', Delta; 
END; 
$proc$; 

の線に沿って何かになり、クエリの時間を測定することは、この複雑である必要はありません。

まず、postgres command line clientには、クライアント側でクエリ時間を測定する機能(SQL Server Management Studioの右下隅の時間と同様)があります。

第2に、record query time in milliseconds(すべてのクエリまたはそれがXミリ秒より長く持続した場合のみ)に可能です。あなたもEXPLAIN ANALYZEを使用することができますテスト目的のために

EXPLAIN (ANALYZE, BUFFERS) YOUR QUERY HERE; 
+2

\ timing –

26

あなたはpsqlで意味はなく、あなたが書いているいくつかのプログラム、助けのため\?を使用して、表示された場合:

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

そしてあなたのような出力を得る:

# \timing on 
Timing is on. 

# select 1234;   
?column? 
---------- 
    1234 
(1 row) 

Time: 0.203 ms 
+1

この質問のタイトルに簡単な根本的な答えをくれてありがとう。 –

+1

これはポストグルにタイミングを表示する最も直接的かつ簡単な方法です。ありがとう! –

関連する問題