我怎样才能让这段代码更快。当我将100条记录插入到我的数据库中时,它很好,但是当我插入时需要很长时间才能说出500K记录。 我已尝试在我的代码中使用内爆,但它无效。 代码似乎有两个foreach循环,一个在另一个内部,但我找不到让它工作的方法,有没有人有想法? 我的框架是codeigniter。
这是代码的样子:
<?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表示例:
答案 0 :(得分:1)
回答我自己的问题,希望将来可以帮助其他人。
在codeigniter / framework的模型.php文件中添加:
$this->db->trans_start();
MY CODE
$this->db->trans_complete();
解决了问题。 :) 它将我的INSERTS记录加速到数据库大约。 30秒内15K记录。
答案 1 :(得分:0)
我的猜测是你正在与数据库建立多个连接,尝试打开一个并保留为所有更改打开的资源,然后只在流程结束时关闭它。