【问题标题】:why query execution is faster with pdo_oci than with oci8?为什么使用 pdo_oci 比使用 oci8 执行查询更快?
【发布时间】:2014-12-03 21:12:17
【问题描述】:

我正在连接到我的 Oracle Database 11g 企业版版本 11.2.0.3.0 - 64 位。

连接php 5.6.3(安装xampp)。

使用 pdo_oci 即时执行简单的查询。

使用 oci8 需要 5 秒。

对于 pdo_oci,我使用扩展名 php_pdo_oci.dll

对于 oci8,我使用扩展名 php_oci8_12c.dll

我已经安装了 oracle instantclient_12_1。

这是 pdo_oci 的代码:

$hote = '123.456.789.3';
$port = '1521';
$service = 'blabla.blabla-db.blabla';
$user = '12345';
$pass = '12345';

$lien_base =
"oci:dbname=(DESCRIPTION =
(ADDRESS_LIST =
    (ADDRESS =
        (PROTOCOL = TCP)
        (Host = ".$hote .")
        (Port = ".$port."))
)
(CONNECT_DATA =
    (SERVICE_NAME = ".$service.")
)
)";

try
{
    $connexion = new PDO($lien_base, $user, $pass);
}
catch (PDOException $erreur)
{
    echo $erreur->getMessage();
}

$num_notice = "030000002";
$notice = $connexion->query("SELECT * FROM UDQ01.Z13U WHERE Z13U_REC_KEY = ".$connexion->quote($num_notice)."")->fetch();

echo '<pre>' . print_r($notice,1) . '</pre>';

以及 oci8 的代码:

$conn = oci_connect('12345', '12345', '123.456.211.3:1521/blabla.blabla-db.blabla.ca');
$query = 'SELECT * FROM UDQ01.Z13U WHERE Z13U_REC_KEY = 030000002';
$stid = oci_parse($conn, $query);
oci_execute($stid, OCI_NO_AUTO_COMMIT);

$row = oci_fetch_array($stid, OCI_ASSOC);

echo '<pre>' . print_r($row,1) . '</pre>';

oci_free_statement($stid);
oci_close($conn);

为什么 oci8 这么慢?

谢谢,

帕特里克

【问题讨论】:

  • 可能其中一项测试命中查询缓存,而另一项测试在数据库“冷”时运行。
  • 不,使用 pdo_oci 总是更快。

标签: php pdo oci8


【解决方案1】:

问题出在查询中:

值之间应该有',比如:

$query = "SELECT * FROM UDQ01.Z13U WHERE Z13U_REC_KEY = '030000002'";

' 是隐含在 pdo_oci 查询中的:

"SELECT * FROM UDQ01.Z13U WHERE Z13U_REC_KEY = ".$connexion->quote($num_notice).""

所以 pdo_oci 和 oci8 同样快。

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2018-08-19
    • 2011-02-03
    • 2015-10-06
    • 1970-01-01
    相关资源
    最近更新 更多