为何CI中运行大数据量更新事务效率很低?
其实数据量一点也不大只有10000多条在本地执行只需要4秒左右但是在代码中执行却需要200多秒我看了下CI的数据库类在事务执行以前也运行了 Set AutoCommit = 0;应该是没有问题的不知道问题出在哪里。。。代码大致如下:
$this->db->trans_start();
foreach($batches as $batch)//$batches数组有10000多条记录
{
$this->db->where('id'=>$batch->id)->from('table');
$count = $this->db->count_all_results();
if($count > 0)
{
$this->db->update($batch)->where('id'=>$batch->id);//如果记录存在则更新
}else
{
$this->db->insert('table', $batch);//如果不存在就插入新纪录
}
}
$this->db->trans_complete();
把SQL语句打印出来对比一下 sql语句全部收集起来复制到SQL客户端运行速度很快几秒钟就好了 这个和CI 的关系不大,请检查服务器中数据库,my.ini的相关设置。 原来事务里的增删改查询条件必须是主键给查询条件的字段改成主键就好了
页:
[1]