用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1501|回复: 4
收起左侧

[HELP] 为何CI中运行大数据量更新事务效率很低?

[复制链接]
发表于 2014-7-19 02:12:48 | 显示全部楼层 |阅读模式
其实数据量一点也不大  只有10000多条  在本地执行只需要4秒左右  但是在代码中执行却需要200多秒  我看了下CI的数据库类  在事务执行以前也运行了 Set AutoCommit = 0;  应该是没有问题的  不知道问题出在哪里。。。

代码大致如下:
PHP复制代码
 
                $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();
 
 
复制代码


发表于 2014-7-19 22:29:23 | 显示全部楼层
把SQL语句打印出来对比一下
 楼主| 发表于 2014-7-20 03:52:27 | 显示全部楼层
sql语句全部收集起来复制到SQL客户端运行速度很快  几秒钟就好了
发表于 2014-7-20 22:15:15 | 显示全部楼层
这个和CI 的关系不大,请检查服务器中数据库,my.ini的相关设置。
 楼主| 发表于 2014-7-21 15:53:16 | 显示全部楼层
原来事务里的增删改查询条件必须是主键  给查询条件的字段改成主键就好了

本版积分规则