直接,不,沒有。但是,您可以通過在對時間感興趣的查詢之前和之後檢查時間來做出間接且相當接近的估算。
$sql = "Your Query";
$bm = "SELECT extract(epoch FROM clock_timestamp())";
$query = "{$bm}; {$sql}; {$bm};";
功能clock_timestamp()爲您提供語句啓動時的服務器實際時間。由於該SELECT沒有涉及任何表格,我們可以預計它幾乎是瞬間的。我想任何Pg驅動程序都支持多個查詢;重要的是這3個查詢(真正的一個和兩個額外的)一起去,否則你會測量數據傳輸時間以及...
對於PHP我有一個函數來處理這個問題。總結如下:
<?php
function pgquery($sql, $conn)
{
// Prepend and append benchmarking queries
$bm = "SELECT extract(epoch FROM clock_timestamp())";
$query = "{$bm}; {$sql}; {$bm};";
// Execute the query, and time it (data transport included)
$ini = microtime(true);
pg_send_query($conn, $query);
while ($resource = pg_get_result($conn))
{
$resources[] = $resource;
}
$end = microtime(true);
// "Extract" the benchmarking results
$q_ini = pg_fetch_row(array_shift($resources));
$q_end = pg_fetch_row(array_pop($resources));
// Compute times
$time = round($end - $ini, 4); # Total time (inc. transport)
$q_time = round($q_end[0] - $q_ini[0], 4); # Query time (Pg server only)
return $resources;
}
?>
我剛剛在那裏留下了基礎知識。 $ conn保存一個到Pg連接的鏈接,$ resources是一個返回的pg資源數組(如果你在$ sql中發送了多個查詢)。
$ time保留查詢離開Pg服務器以來的總時間,直到結果到達。 $ q-time只包含你想要的實際查詢時間(或者非常好的近似值)。
添加錯誤處理和其他處理你喜歡,我有很多,但它與你的問題無關。
有什麼方法可以輸出時間,這樣我就不必解析文件了嗎?這是我必須做的事,但似乎應該有一個更直接的方法。 – 2010-07-01 18:23:43
'psql -c「EXPLAIN ANALYZE select * from mytable where col1 ...」| grep「總運行時間」' – 2010-07-01 18:26:03
如果可能的話,我真的很想在SQL中完全做到這一點。似乎我應該能夠將它在psql交互式shell中直接返回的運行時作爲值存儲。 你的回答是非常正確的,而且如果沒有人能給我一個純粹的SQL答案,我一直在計劃做什麼。 感謝您的時間! – 2010-07-01 18:35:54