Когда я тестирую этот запрос, он занимает около 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 секунды. Должен ли я поэтому разбить его на ряд простых запросов?
LATER EDIT: С помощью полученных комментариев и ответов я решил разделить запрос на два. В результате получается следующее:
$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
Возможно, удалить 'GROUP BY hid' и перейти на' SELECT DISTINCT hid' – Justin