我想更新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'並讓數據庫成組運行會更有效率。 –