1

このクエリをテストすると、完了するまでに約 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秒。

ありがとうございます。

4

2 に答える 2

0

私は気にしませんが、cron ジョブがプロセスの途中でタイムアウトしないことを確認してください。私は過去に個人的にクエリを実行し、cronジョブで数分間実行しましたが、問題はありませんでした。

于 2013-03-22T11:24:16.203 に答える