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个数据保持交易.就这些.对不起,我不擅长英语.
| 归档时间: |
|
| 查看次数: |
7459 次 |
| 最近记录: |