このクエリをテストすると、完了するまでに約 17 ~ 20 秒かかります。
UPDATE ex_hotel_temp
SET specialoffer='1'
WHERE hid IN
(SELECT hid
FROM ex_dates
WHERE offer_id IS NOT NULL
OR xfory_id IS NOT NULL
OR long_id IS NOT NULL
OR early_id IS NOT NULL
GROUP BY hid)
これは夜間に実行されてデータベースのハウスキーピングを行う cron ジョブですが (結果を待っているサイト訪問者はいません)、サーバーに許容できない負荷がかかるように思えます。私は正しいですか、それとも何も気にしていませんか?
クエリの各要素を個別に実行すると、約 0.001 秒かかります。したがって、代わりに一連の単純なクエリに分割する必要がありますか?
LATER EDIT:受け取ったコメントと回答の助けを借りて、クエリを2つに分割することにしました。結果は次のとおりです。
$query_hotel = "SELECT hid FROM ex_dates WHERE offer_id IS NOT NULL OR xfory_id IS NOT NULL OR long_id IS NOT NULL OR early_id IS NOT NULL GROUP BY hid";
$hotel = mysql_query($query_hotel, $MySQL_XXX) or die(mysql_error());
$row_hotel = mysql_fetch_assoc($hotel);
$totalRows_hotel = mysql_num_rows($hotel);
$hid_array = array();
do {
array_push($hid_array,$row_hotel['hid']);
}while ($row_hotel = mysql_fetch_assoc($hotel)) ;
$hid_list = implode("','",$hid_array);
$hid_list = "'$hid_list'";
// Mark the hotels as having a special offer
$query_update = "UPDATE ex_hotel_temp SET specialoffer='1' WHERE hid IN ($hid_list)";
$result = mysql_query($query_update, $MySQL_XXX) or die(mysql_error());
きれいではありませんが、機能します。
少し PHP が投入された 2 つのクエリがあるため、実行にかかる時間を正確に測定することはできませんが、ページが読み込まれるまでの時間を調べるだけで、 20秒より1秒。
ありがとうございます。