複数のページに分割されたJSONファイルを解析するPHPスクリプトのセットアップがあります。MySQLのマルチクエリー非常に遅く、単純なトランケートクエリの代わりに?
このPHPスクリプトはJSONを解析し、それをMySQLデータベースに挿入します。
単一のクエリで...(TRUNCATE
声明なし):multi_queryのオンscript execution time: 16.451724052429
で成功し
if ($count > 0) {
//check toperform operation
foreach ($jsondecode as $entries) {
//getting variables here
$sql = "INSERT INTO table (title, handle, imagesrc)
VALUES ('".$title."', '".$handle."', '".$imagesrc."')";
if ($connect->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $connect->error;
}
}
}
結果....:
if ($count > 0) {
$sql = "TRUNCATE table;";
foreach ($jsondecode as $entries) {
//getting variables here
$sql.= "INSERT INTO table (title, handle, imagesrc)
VALUES ('".$title."', '".$handle."', '".$imagesrc."')";
if (!$mysqli->multi_query($sql)) {
echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
do {
if ($res = $mysqli->store_result()) {
var_dump($res->fetch_all(MYSQLI_ASSOC));
$res->free();
}
} while ($mysqli->more_results() && $mysqli->next_result());
}
}
結果script execution time: 278.05182099342
、ほぼ5分で正常に終了しました。
TRUNCATE
の前に、INSERT
の表があります。
私はこのスクリプトを12時間ごとに実行する予定のWebサーバーCRONジョブでこれを実行します。
明らかに、1つのクエリと複数のクエリの間にこのような膨大な実行時間の差があります。何かできることは何ですか?
私の唯一の考えは、TRUNCATE
ステートメントを12時間ごとに実行するだけの、別のCRONジョブスクリプトを設定することです。このメインスクリプトが実行される1分前です。これはうまくいくはずですが、当然理想的ではないので、私は単なるスクリプトではなく複数のスクリプトを扱わなければなりません。
あなたの問題に対する答えはありませんが、挿入値もカンマで区切って複数の項目を1つのクエリとして実行できます。 – Scuzzy
クエリが作成された後、すべての繰り返しではなく、 'insert'を実行します。たとえば、次のようになります。 – chris85