有以下模拟INSERT
查询,这看起来非常慢!
$sqlite = new \PDO();
for($i=0;$i<100;$i++) {
$sqlite->prepare('INSERT INTO test (`id`, `data1`, `data2`) VALUES (:id, :data1, :data2);');
$sqlite->execute(array(
':id' => NULL,
':data1' => 'some string',
':data2' = 'some string'
// And more
));
}
以23.261秒(4.3 q / s)执行100次插入
设置pragma synchronous = off;
后
$sqlite->exec("pragma synchronous = off;");
以0.037秒(2704.7 q / s)执行100次插入
pragma synchronous = off
可能有哪些副作用?答案 0 :(得分:1)
documentation记录副作用:
在同步OFF(0)的情况下,SQLite一旦将数据传递给操作系统,就会继续进行同步。如果运行SQLite的应用程序崩溃,则数据将是安全的,但如果操作系统崩溃或计算机在将数据写入磁盘表面之前断电,则数据库可能会损坏。另一方面,同步OFF时,提交速度可以提高几个数量级。
使用单个事务是快速插入多行的唯一安全方法。就这么做。