Я собираю данные из одной таблицы в другую, используя запрос, подобный следующему:
DELETE FROM wp_popular WHERE popular_type='favorites';
INSERT INTO wp_popular (post_id, popular_type, period, popular_value)
SELECT post_id, 'favorites' AS popular_type, '30-days' AS period, COUNT(user_id) AS popular_value ;
FROM wp_favorites WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= favorited_date
GROUP BY post_id;
INSERT INTO wp_popular (post_id, popular_type, period, popular_value)
SELECT post_id, 'favorites' AS popular_type, '' AS period, COUNT(user_id) AS popular_value
FROM wp_favorites GROUP BY post_id;
Это блокирует стол почти на минуту. Нет хорошо.
Моей первой мыслью было выполнить работу во временной таблице, а затем вывести содержимое в исходную таблицу. Это выглядит примерно так:
CREATE TEMPORARY TABLE wp_new_popular LIKE wp_popular;
INSERT ...
DELETE FROM wp_popular WHERE popular_type='favorites';
INSERT INTO wp_popular SELECT * FROM wp_new_popular;
Эти два последних запроса по-прежнему занимают пару секунд каждый. Любые предложения, как я могу ускорить это?
Я могу немного реструктурировать свое приложение, чтобы содержимое wp_popular
было полностью уничтожено и заменено. Тогда я предположил, что смогу TRUNCATE
таблицу и заменить ее содержимое. Будет ли быстрее просто удалить wp_popular
и переименовать wp_new_popular
вместо него? Могу ли я сделать это с временной таблицей?