Я работаю с базой данных MySQL, и мне нужно создать интервал дат за указанный период (заданный датой начала и окончания) с указанным шагом (например, один день).Генерация интервалов дат MySQL
Я написал хранимую процедуру для генерации интервалов, создания временной таблицы и заполнения этой таблицы интервалами.
DELIMITER $$
CREATE PROCEDURE showu(IN start date, IN stop date)
BEGIN
CREATE TEMPORARY TABLE intervals(single_day DATE);
next_date: LOOP
IF start>stop THEN
LEAVE next_date;
END IF;
INSERT INTO intervals(single_day) VALUES(start);
SET start = DATE_ADD(start, INTERVAL 1 DAY);
END LOOP next_date;
END$$
DELIMITER ;
Я хочу использовать эту временную таблицу в запросах соединения. Однако я столкнулся с проблемой. Когда я вызываю вызов процедуры showu('2008-01-09', '2010-02-09');
, он выполняет приблизительно 30 секунд. Вопрос, почему он так долго выполняется? Можно ли улучшить его? Если это решение неверно, как я могу решить свою проблему по-другому?
30 вторыми для этой процедуры слишком много, но я не тот, кто любит временную таблицу. Можете ли вы дать больше о том, почему вы хотите это сделать, может быть, у меня есть другой способ сделать это? –
Вы можете. Используйте приложение для этого. Серьезно - DB не должен использоваться таким образом. Если вы все еще хотите использовать это - просто заполните постоянную (не временную) таблицу с необходимыми данными один раз. –
@SumitGupta Временная таблица - единственный способ, которым я основал. Раньше я использовал базу данных PostgreSQL. Он имеет функцию generate_series(), которая возвращает мне множество интервалов. Этот набор я могу использовать как таблицу. Я искал, как я могу сделать то же самое в MySQL, и единственным решением, которое я основал, была временная таблица. Мне нужно решить эту проблему, и я принимаю любое предложение. – mvb13