0

它可以工作,但是当我在 CSV 文件中导入近 2500 多行的大文件时,它加载/导入速度很慢,并且说错误,但有些文件正在插入,有些则没有。我的问题是有没有办法让它更快导入?我在文件中看到但我不知道如何使用它。

代码:

    function convert_csv($id){
                if (empty($id)) redirect("contracts");
                $config['upload_path']   = './files/contracts-csv/'; 
                $config['allowed_types'] = 'csv';   
                $config['max_size']      = '4096';      
                $config['overwrite']     =  TRUE;

                $this->load->library('upload', $config);
                $this->upload->display_errors('', '');

                if (!$this->upload->do_upload("csv_file")) {
                      echo $this->upload->display_errors(); die();
                      $this->data['error'] = array('error' => $this->upload->display_errors());
                } else {
                    $upload_result = $this->upload->data();
                    $upload_result = $this->upload->data(); 
                    $this->load->library('csvreader');
                    $result =   $this->csvreader->parse_file("./files/contracts-csv/".$upload_result['file_name']);
                    $date_today = date('Y-m-d H:i:s');
                        foreach ($result as $v) {
                            $this->contract_items->add_serial($v,$id,$date_today);
                        }
                }
}
4

3 回答 3

0

您可以将其包装在insert_batch查询中。

$your_data = array();
foreach ($result as $v) {
    $your_data[] = array(
        'v' => $v,
        'id' => $id,
        'date_today' => $today,
    );
);

$this->db->insert_batch('your_table_name', $your_data);

这会将整个事情作为单个查询运行。这应该比多个查询更快。确切的代码取决于你,我不知道$this->contract_items->add_serial

于 2013-10-08T13:38:04.000 回答
0

在 CodeIgniter 中使用MySQL 事务,它将大大加快一切速度(例如,制作 500 个项目的块并将它们插入到一个事务中)。

但如果它以错误结束,看起来问题可能出在其他地方。2500也不算多。

于 2013-10-08T12:08:40.903 回答
0

csv 中 line 的每次迭代都会执行以下操作:

  • 构建插入 sql
  • 将其发送到数据库布局
  • 得到回应

您可以尝试构建批量 sql,例如:

insert into table_name (f1, f2, f3) values ("val1", "val2", "val3"), ("val2_1", "val2_2", "val2_3"),...

大约 100-200'("val1", "val2", "val3")'块应该更快,但我不知道 codeigniter 缓存和其他东西怎么样......

于 2013-10-08T12:10:15.050 回答