當我測試此查詢時,大約需要17-20秒才能完成。可以使用多長時間運行mySQL查詢
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)
雖然這是在夜間運行做數據庫的一些看家一個cronjob(沒有站點訪問者坐着等待結果),在我看來是服務器上的負載不能接受。我是對的嗎,還是我無所事事?
當我單獨運行查詢的每個元素大約需要0.001秒。我是否應該將它分解爲一系列簡單的查詢呢?
後來編輯: 在收到的意見和答案的幫助下,我決定將查詢分成兩部分。結果是這樣的:
$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,我無法準確測量運行需要多長時間,但僅僅通過查看頁面加載時間就顯得非常接近到20秒的分數。
感謝所有。
我建議使用聯接,放棄'GROUP BY'(它不會在此添加任何內容),並確保'ex_hotel_temp.hid'和'ex_dates.hid'上有索引。 – eggyal 2013-03-22 11:24:31
也許刪除'GROUP BY hid'並更改爲'SELECT DISTINCT hid' – Justin 2013-03-22 11:34:55