CodeIgniter大批量插入

Cri*_*ane 0 php mysql codeigniter insert batch-file

我目前正在创建一个批处理脚本,它调用多个PHP脚本(使用CodeIgniter)从一个DB中提取数据,处理结果并将结果插入另一个DB.首先,我知道这可能不是这项工作的最佳工具,但它现在必须要做.但回到主题,脚本运行正常,性能非常好,除了一种方法.它从第一个DB中提取数据,并将其插入第二个DB.这是一个包含大约20列和35000行的表.

我正在使用一个简单的$this->db->insert_batch('tablename', $insertdata);函数来插入这些结果,但不知何故,脚本需要大约15分钟才能执行...

问题是,如何优化这个过程?

提前致谢

编辑

这是我用来在第二个数据库上创建表的查询,数据插入的数据库.

CREATE TABLE IF NOT EXISTS `invoices` (
    `invoice_number` varchar(40) NOT NULL,
    `shippinglist_number` varchar(40) DEFAULT NULL,
    `shippinglist_line` varchar(255) DEFAULT NULL,
    `customer_id` varchar(5) NOT NULL,
    `deptor` varchar(5) NOT NULL,
    `vat_number` int(255) DEFAULT NULL,
    `invoice_date` date NOT NULL,
    `expire_date` date NULL DEFAULT NULL,
    `currency_code` varchar(10) NOT NULL,
    `subtotal` decimal(19,4) NOT NULL,
    `vat` decimal(19,4) NOT NULL,
    `total` decimal(19,4) NOT NULL,
    `qty` int(10) NOT NULL,
    `partcode` varchar(255) NOT NULL,
    `description` text,
    `price` decimal(19,4) NOT NULL,
    `pieces_per` int(10) NOT NULL,
    `article_customer` varchar(255) DEFAULT NULL,
    `reference_customer` varchar(255) DEFAULT NULL,
    `sales_line_1` text,
    `sales_line_2` text,
    `sales_line_3` text,
    `memo` text,
    KEY `invoice_number` (`invoice_number`,`customer_id`,`deptor`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

查询只是一个普通插入,但35000行被切成100行.

小智 5

试试这个

// some $datas

$this->db->trans_start();

$_datas = array_chunk($datas, 300);

foreach ($_datas as $key => $data) {
    $this->db->insert_batch('table', $data);
}

$this->db->trans_complete();
Run Code Online (Sandbox Code Playgroud)

你分裂数组.300,300,300 ....(mysql建议插入微小数据).和insert_batch!每300个数据保持交易.就这些.对不起,我不擅长英语.