gpt4 book ai didi

php - 为什么用 greenplum 准备这么慢?

转载 作者:行者123 更新时间:2023-11-29 12:09:55 31 4
gpt4 key购买 nike

我连接了一个greenplum,我发现pdo太慢了

我的测试脚本是这样的

<?php
$sql="select keyword from r_keyword_hour where domainId = '68955' and date >= '2017-01-17' and date < '2017-01-18' limit 10 offset 0";
$start2 = microtime(true);
$con = pg_connect("host=xxx user=xxx dbname=xxx connect_timeout=5 port=xxx password=21fdcebd7156d1b9");
$result2 = pg_query($con,$sql);
$test=pg_fetch_all($result2);
$end2 = microtime(true);
$start = microtime(true);
$d=new PDO('pgsql:host=xxx user=xxx dbname=xxx connect_timeout=5 port=xxx password=xxx');
$result=$d->query($sql);
$end = microtime(true);
#var_dump($end-$start);
#var_dump($end2-$start2);
echo strval($end-$start)."\t".strval($end2-$start2)."\n"
?>

结果是 pdo 使用 1.8s 而 pg_* 只使用 0.7s。当greenplum过载时,pdo变成了53.9s,而pg_*只有5s。为什么pdo这么慢?

更新:通常情况下,整个 pdo 查询花费 1.6s,而“$result=$d->query($sql);”花费几乎所有这 1.6s,可能大约 0.01s 不同。至于 pg_* 查询,如果我使用“$result2 = pg_query($con,$sql)”方法,它只需要大约 0.8s,如果我使用方法作为@Stephen Carter建议,先prepare,大概需要1.5s。有时候gp机器过载,pdo需要26s左右,此时pg_* with prepare需要18s,pg_query只需要2s

更新2:我捕获了pdo请求的数据包,发现“$result=$d->query($sql)”也使用了postgresql的prepare。我不确定是否有办法让PDO不使用prepare。但是现在,我们可以知道 prepare 会减慢 greenplum 的速度,我会继续努力寻找原因。

最佳答案

你不是在比较同类。

pg_query 正在执行一个简单的查询。

PDO 正在准备一个语句然后执行它。

如果你用 pg_* 函数做一个准备好的语句,执行时间应该是相似的,至少我测试的时候是这样。

$sql="SELECT * FROM table1 WHERE id > 500";

$con = pg_connect("**********");
$pre = pg_prepare($con, "my_query", $sql);
$exe = pg_execute($con, "my_query", array());
$result=pg_fetch_all($exe);

$d=new PDO("**********");
$sth=$d->prepare($sql);
$sth->execute();
$result = $sth->fetchAll();

或者您可以更改 PDO 方法以避免执行准备语句。

关于php - 为什么用 greenplum 准备这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41740384/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com