私が取り組んでいる時間依存のスクリプトがあり、microtime() を使用してボトルネックを見つけました。時間の増加は、300 以上の値をチェックして、それらがデータベースに 1 つずつ存在するかどうかを 0.04 秒のクエリで確認したことが原因であると判断しました。
スクリプトの背景は、キャッシュ スクリプトです。DB に存在するかどうかを確認する必要があるため、true/false (rowCount によって取得) が必要ですが、false を値に関連付けて更新できるようにする方法も必要です。WHERE タグ IN (:ARRAY) を使用すると、個々の呼び出しよりも高速に動作することはわかっていますが、このメソッドの値に true/false の関連付けを適用する方法が思い浮かびません。
私の現在のコードは以下の通りです:
//loop through all our values!
//prepare out reusuable statement
$stmt = $db->prepare("SELECT * from cache WHERE value=?");
foreach($values as $tempVal)
{
//find if its in the database
try
{
$stmt->execute(array($tempVal));
$valCount = $stmt->rowCount();
} catch(PDOException $ex) {
echo "PDO error send this to us: " . $ex->getMessage();
}
//update flag
$addToUpdate = 1;
//if its in the database
if($valCount > 0)
{
//get the tag data
$valRes= $stmt->fetch();
//check if cache expired
$addToUpdate = 0;
}
//add to update list
if($addToUpdate)
{
//needs updating
$updateList[] = $tempVal;
//add to not in DB list to minimize queries
if($tagTCount == 0)
{
$notInDB[$tempVal] = $tempVal;
}
}
助言がありますか?不明な点があれば、さらに説明できます。
ありがとう、ニック