codeigniter使用技巧批量插入数据实例方法分享
需积分: 0 58 浏览量
更新于2020-12-19
收藏 24KB PDF 举报
复制代码 代码如下:$sub_form = array(); $loop = 0; $ins_loop = 0; $sum = count($form_datas); $this->logger->info(‘insert data total:’.$sum); //使用事物批量导入有助于提高插入效率 $callStartTime = microtime(true); $this->db->trans_start(); foreach ( $form_datas as $item ) { $loop ++; $sub_form[] = $item
在本文中,我们将深入探讨CodeIgniter框架中的批量插入数据的技巧,这在处理大量数据时可以显著提高性能。批量插入是一种优化数据库操作的方式,它避免了多次单条记录插入的开销,尤其是在循环处理大量数据时。
让我们看一段示例代码,这段代码展示了如何在CodeIgniter中实现批量插入:
```php
$sub_form = array();
$loop = 0;
$ins_loop = 0;
$sum = count($form_datas);
$this->logger->info('insert data total: '.$sum); // 输出总数据量
// 使用事务开始批量导入,以提高效率
$callStartTime = microtime(true);
$this->db->trans_start();
foreach ($form_datas as $item) {
$loop++;
$sub_form[] = $item;
// 每处理200条数据,或者处理完所有数据时,进行批量插入
if (($loop % 200) == 0 || $loop == $sum) {
$this->logger->info('insert data num: '.$loop);
$res = $this->kb_object_instance_mdl->insert_batch($sub_form, $obj_id);
$ins_loop++;
unset($sub_form);
// 每处理5次批量插入,提交一次事务
if (($ins_loop % 5) == 0) {
$this->logger->info('insert data trans_complete ins_loop: '.$ins_loop);
$this->db->trans_complete();
if ($loop != $sum) {
$this->db->trans_start(); // 事务重新开始,准备下一轮批量插入
}
}
}
}
// $this->db->trans_complete(); // 如果不在循环内部提交,这里可以提交最终的事务
$callEndTime = microtime(true);
$callTime = $callEndTime - $callStartTime;
$this->logger->info('insert data use time: '.sprintf('%.4f', $callTime));
if ($this->db->trans_status() === TRUE) {
$this->_show_msg('1', array('data' => 'import ok'));
} else {
$this->_show_error('saveOrUpdate error');
}
```
在这个例子中,`$form_datas` 包含了要插入数据库的数据数组。我们使用 `insert_batch()` 方法进行批量插入,这个方法是CodeIgniter的Active Record类提供的,它允许我们在一次数据库操作中插入多条记录。
在循环中,每处理200条数据(或处理完所有数据),我们就会调用 `insert_batch()` 进行批量插入。同时,为了提高效率,我们采用了事务处理,每处理5次批量插入就提交一次事务。这样做的好处是,即使在批量插入过程中发生错误,只有最近的一批数据会被回滚,而不是整个操作。
注意,`$this->db->trans_start()` 和 `$this->db->trans_complete()` 分别用于开始和结束事务。如果在事务中出现错误,`$this->db->trans_status()` 返回 `FALSE`,此时程序会显示错误信息。如果一切顺利,事务将被提交,用户会收到成功的反馈。
在性能优化方面,批量插入比单条插入更有效,因为它减少了数据库连接的开销和多次SQL查询的执行时间。此外,通过合理设置批量插入的条数(例如200条)和事务提交的频率(例如每5次提交一次),可以在确保效率的同时降低内存占用。
总结来说,CodeIgniter中的批量插入数据技巧是通过事务处理和分批插入来提高数据库操作效率。这种方法尤其适用于需要处理大量数据的应用场景,可以显著提升应用的性能。