次のアナログがあります。非常に遅いと思われるINSERT
クエリです。 0.037秒(2704.7 Q/100インサート実行pragma synchronous = off;
PDO SQLiteの挿入をトランザクションなしで行う方法はありますか?
$sqlite->exec("pragma synchronous = off;");
を設定した後23.261秒(4.3 Q/S)
100のインサート実行
$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
));
}
s)
pragma synchronous = off
にはどんな副作用がありますか?- 私が理解する限り、ボトルネックはfsyncですよね?
- クエリをキューに入れるトランザクションを使わずにSQLiteを高速化する方法はありますか?
複数行のSQL文を最初にアセンブルして、最後に一度実行しようとしましたか? – Rasclatt
@Rasclattトランザクション '$ sqlite-> beginTransaction();'と '$ sqlite-> commit();'を使うのと基本的に同じです。ここでは例を簡略化していますが、100件のクエリのすべてがお互いに実行されるわけではありません。 –