使用PHP在SQL Developer中更新表太慢了

时间:2015-07-21 16:32:03

标签: php oracle

我想更新存储在Oracle数据库中的几十万行。为此,我使用PHP和事务。 但整个过程非常缓慢。这就是我的工作:

while (($row = oci_fetch_array($stid, OCI_ASSOC))) {

// define input for function
$id = $row['ID'];
$upstream_attn = $row['UPSTREAM_ATTN'];
$downstream_attn = $row['DOWNSTREAM_ATTN'];
$attainable_bitrate_adsl = $row['ATTAINABLE_BITRATE_ADSL'];
$stability = $row['STABILITY'];
$performance = $row['PERFORMANCE'];
$dsl_type = $row['DSL_TYPE'];
$snr_profile = $row['SNR_PROFILE'];

// execute function
$validationStatus =  validatePerformanceData($upstream_attn,$downstream_attn,$attainable_bitrate_adsl,$stability,$performance,$dsl_type,$snr_profile); // return true or false

if ($validationStatus== 'OK'){

    $stid_tmp = oci_parse($connection,"update " . ALUWS_DATA_HISTORICAL_TBL . " set VALIDATION_STATUS = 1 where ID = :id_bbn");
    oci_bind_by_name($stid_tmp, ":id_bbn", $id);
    $r_tmp = oci_execute($stid_tmp, OCI_NO_AUTO_COMMIT);

}
else{
    $y = $y +1;
}
}

oci_commit($connection);

//disconnect from database
oci_close($connection);

整个过程需要很长时间。我在oci_execute函数中添加了模式:OCI_NO_AUTO_COMMIT以避免自动提交,但这并没有太大的区别。

欢迎任何其他建议。

1 个答案:

答案 0 :(得分:2)

不是单独运行每个更新,而是构建一个ID数组,然后在循环之后,更新ID所在的表(以逗号分隔的值列表)。