CI活动记录更新和update_batch之间的差异

时间:2014-09-16 02:02:28

标签: php codeigniter activerecord

我在我的应用程序中使用CI。我目前想知道update()和更新批次之间有什么区别?可能在性能或流量方面?

我有更新()的示例代码段:

$data = array(
  array(
      'title' => 'My title' ,
      'name' => 'My Name 2' ,
      'date' => 'My date 2'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name 2' ,
      'date' => 'Another date 2'
   )
 );
 $this->db->where('id', 1)->update('user', $data);

用于update_batch();

 $data = array(
  array(
      'id'   => 1,
      'title' => 'My title' ,
      'name' => 'My Name 2' ,
      'date' => 'My date 2'
   ),
   array(
      'id'   => 1,
      'title' => 'Another title' ,
      'name' => 'Another Name 2' ,
      'date' => 'Another date 2'
   )
 );
 $this->db->update_batch('user', $data, 'id');

1 个答案:

答案 0 :(得分:0)

是的,存在差异:连接到数据库的次数,在更新大量行时可能会大大提高性能。在批量执行多个更新时,您将一次连接到数据库并更新所有行,否则,每次更新时连接一次,并且该时间会增加到执行时间,从而损害您的性能。为了给你一个改进的想法,没有批量与批量是3分钟对7秒我曾经不得不在小型服务器上更新15.000行。

关于您向我们展示的数据批次,您做错了:想法是更新两个不同的行,所以如果您要更新的id(您用来检查以选择行的字段)必须是不同的它们,否则你更新一行,然后再次更新同一行。检查以下差异:

 $data = array(
  array(
      'id'   => 1,
      'title' => 'My title' ,
      'name' => 'My Name 2' ,
      'date' => 'My date 2'
   ),
   array(
      // This id MUST BE of a different row if you want to achieve something, XD
      'id'   => 2,
      'title' => 'Another title' ,
      'name' => 'Another Name 2' ,
      'date' => 'Another date 2'
   )
 );
 $this->db->update_batch('user', $data, 'id');