powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Хранимая функция тормозит с group/order/join
1 сообщений из 1, страница 1 из 1
Хранимая функция тормозит с group/order/join
    #39233517
earlcherry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Написал хранимую функцию для расчета дедлайнов. Берется дата начала в timestamp, прибавляется срок в timestamp и с учетом рабочих дней и рабочего времени возвращает дату конца.

BEGIN
DECLARE minute INT;
DECLARE result INT;
DECLARE i INT;
DECLARE day INT;
DECLARE daytime INT;
DECLARE now_start_diff INT;
DECLARE end_start_diff INT;
DECLARE oldday INT;
DECLARE nonbusiness INT;
SET oldday = 0;
SET minute = add_time/60;
SET result = start-(start%60);
SET i = 0;

WHILE i<minute DO
SET i = i+1;
SET day = UNIX_TIMESTAMP(FROM_UNIXTIME(result,'%Y-%m-%d'));
SET daytime = result - day;
IF(daytime < time_start) THEN
SET now_start_diff = time_start - daytime;
SET result = now_start_diff;
ELSEIF(daytime>time_end) THEN
SET end_start_diff = (60*60*24) - daytime + time_start;
SET result = result + end_start_diff;
SET result = result + 60;
END IF;
IF(oldday<>day) THEN
WHILE exists(select day from calendar_nonbusiness where calendar_nonbusiness.day=day) DO
SET result = result + (24*60*60);
SET day = UNIX_TIMESTAMP(FROM_UNIXTIME(result,'%Y-%m-%d'));
END WHILE;
END IF;
SET result = result + 60;
SET oldday = day;
END WHILE;
IF(until_end = 1) THEN
SET day = UNIX_TIMESTAMP(FROM_UNIXTIME(result,'%Y-%m-%d'));
SET daytime = result - day;
SET result = result + (time_end - daytime);
END IF;
RETURN (result);
END

Сама по себе функция работает хорошо. Если брать таблицу с 50 000 записей, то расчитывает очень быстро. Если джойнить к ней еще таблицу тоже работает быстро. Если использовать group или order без джойна, тоже быстро. Но как только вместе используются джойн и group или order, то процесс тупо зависает.
Прикладываю скрин с explain
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Хранимая функция тормозит с group/order/join
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]