我怎樣才能使此代碼更快。當我插入100條記錄到我的數據庫時很好,但是插入我們說的500K條記錄需要很長時間。 我試過在我的代碼中使用implode,但它不工作。 代碼似乎有兩個foreach循環,一個在另一個內部,但我找不到一種方法使其工作,有沒有人有一個想法? 我的框架是codeigniter。foreach INSERT到Mysql數據庫是非常慢的,特別是當插入超過100K記錄和
下面的代碼是什麼樣子:
<?php
function Add_multiple_users($values)
{
$err = '';
foreach($values as $rows)
{
$clientQuery = 'INSERT INTO
client
(
admin_id,
create_time
)
VALUES
(
"'.$this -> session -> userdata('user_id').'",
"'.date('Y-m-d H:i:s').'"
)';
$clientResult = @$this -> db -> query($clientQuery);
if($clientResult)
{
$client_id = $this -> db -> insert_id();
foreach($rows as $row)
{
$attrQuery = 'INSERT INTO
client_attribute_value
(
attribute_id,
client_id,
value
)
VALUES
(
"'.$row['attribute_id'].'",
"'.$client_id.'",
"'.addslashes(trim($row['value'])).'"
)';
$attrResult = @$this -> db -> query($attrQuery);
if(!$attrResult)
{
$err .= '<p class="box error">Could not add attribute for<br>
Attribute ID: '.$row['attribute_id'].'<br>
Client ID: '.$client_id.'<br>
Attribute Value: '.trim($row['value']).'</p>';
}
}
}
}
return $err;
}
?>
這是我已經試過:
$attrQuery = "INSERT INTO client_attribute_value (attribute_id, client_id, value) VALUES ";
$vls = array();
foreach($rows as $row) {
$myattribute_id = $row['attribute_id'];
$myclient_id = $row[$client_id];
$myvalue = addslashes(trim($row['value']));
$vls[] = " ('$myattribute_id ', '$myclient_id ', '$myvalue ')";
$attrQuery .= implode(', ', $vls);
$attrResult = @$this -> db -> query($attrQuery);
客戶表樣本:
client_attribute_value表樣本:
沒有工作批量插入?或者你有什麼問題?順便說一下,什麼時間很長?分鐘?小時? 500k行是相當數量的數據 – Chococroc
500K記錄可能需要長達2小時在我的服務器上。我認爲我試過hungs的代碼是因爲我添加了一個數組(),因爲第一個foreach循環將數據插入到客戶端表中,但每個循環的第二個循環都會停止代碼。我只是試圖使用implode選項更快地將插入插入數據庫 – chap
您每個用戶有多少屬性?我會首先重寫腳本並使用佔位符準備好的語句。在foreach之前準備語句**,綁定參數並在循環內執行語句。在你的內部foreach做一個插入與多個值。 – VMai