我想更新Oracle数据库中存储的成千上万行。为此,我使用PHP和事务。 但整个过程非常缓慢。这是我做的:使用PHP更新SQL Developer中的表太慢
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以避免自动提交,但这并没有太大区别。
其他建议大多是欢迎的。
什么部分需要'年龄'? – cmorrissey
在第一个IF语句中执行UPDATING部分。 – user1919
你能给我们一些数字来解释你所看到的效果的大小吗? “多年”可能是几秒,几分钟或几小时。正在处理多少行?你认为应该花多长时间?至少,假设'ALUWS_DATA_HISTORICAL_TBL'至少在循环内是一个常量,你只需要执行一次'oci_parse'并且只需要在循环中绑定和执行多次。数组中的数据来自哪里?如果你将它从数据库中提取出来,那么做一个'update'并让数据库成组运行会更有效率。 –