Site icon 时鹏亮的Blog

SQLite3-批量insert插入多条信息-提高效率的办法

请知悉:本文最近一次更新为 12年 前,文中内容可能已经过时。

这也是之前进行了十万级别的insert插入信息,因为数量太多,所以感觉一条一条执行简直慢的要死……经过查询,找到了对应的解决办法,极大的提升了插入多条消息的效率。
之所以慢,就是因为每一条指令都成了一个事务,从而极大的降低了执行效率,解决办法就是把所有的指令归结为一个事务一次执行即可。
下面就是类比代码

/*开始事务*/
begin transaction;
/*万条记录开始*/
insert into [表名] values();
/*万条记录结束*/
/*执行事务*/
commit transaction;

利用事务,可以将几十分钟的执行指令大幅缩减到几十秒。因为因为这个过程只写一次磁盘。
还有一个思路,就是使用SQLite内存表,将数据先写到内存表,然后再更新到磁盘表。
(以下部分代码来自:http://17drupal.com/node/41507)

$conn = new PDO('SQLite::memory:');
$conn->exec("CREATE TABLE t1 (id1 interge,str1 varchar(30))");
$conn->exec("begin transaction");
$sql = '';
for($i=0;$i<1000000;$i++) {
$sql = "INSERT INTO t1 VALUES ({$i}, '阿斯蒂芬是否');";
$conn->exec($sql);
}

$conn->exec("commit transaction");

//内存表刷到磁盘
$conn->exec('ATTACH "D:test.db" AS test1');
$conn->exec("insert into test1.t1 SELECT * FROM t1");
$conn->exec('DETACH test1');

原始博主说这个过程和使用事务的时间差不多。我未测试。

用一个事务的办法就可以提高效率的了,暂时不深入研究了。


如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。

尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。


与《SQLite3-批量insert插入多条信息-提高效率的办法》相关的博文:

Exit mobile version