当我测试此查询时,大约需要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