如何对一组PostgreSQL查询进行基准测试?

时间:2017-06-12 21:20:04

标签: postgresql benchmarking common-table-expression sqlperformance

我有一个批量的SQL基准查询,我想执行并计算它们的时间。我想要使用命令EXECUTE ANALYZE获取执行计划。

基于此处建议的方法Get execution time of PostgreSQL query 我编写了一个过程,为每个查询包含以下代码

-------------------------
Query = 'Q1';
StartTime := clock_timestamp();

PERFORM <** Query 1 goes here **>

EndTime := clock_timestamp();
Duration := 1000 * ( extract(epoch from EndTime) - extract(epoch from StartTime) );
INSERT INTO execution_tests VALUES (Query, StartTime, EndTime, Duration);
-------------------------

我使用PERFORM而不是SELECT来执行查询并丢弃结果。

这适用于简单查询,但我有许多具有WITH子句的查询。根据手册

  

对于WITH查询,请使用PERFORM,然后将查询放在括号中。   (在这种情况下,查询只能返回一行。)

但是,我需要进行基准测试的所有WITH查询都会返回多行。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这样的东西
session_start();
foreach ($_POST as $key => $value) { 
    $_SESSION['post'][$key] = $value;
}
extract($_SESSION['post']);
if (isset($_POST["submit"])) {
    extract($_SESSION['post']);
    //global $wpdb;
    //$wpdb->insert("tablename", array("data" => $_SESSION["data"], array("%s"));
    include 'dbconnect.php';
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "INSERT INTO tablename ( data ) VALUES ( '{$data}' )";
        $conn ->exec($sql);
    }
        catch(PDOException $e)
    {
        echo "Connection failed: " . $e->getMessage();
    }
        $conn = null;
        session_destroy();
    }