当我测试这个查询时,大约需要 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)
虽然这是一个在夜间运行的 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 秒。
谢谢大家。