|
|
|
Хранимая функция тормозит с group/order/join
|
|||
|---|---|---|---|
|
#18+
Добрый день. Написал хранимую функцию для расчета дедлайнов. Берется дата начала в 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 15:57 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=102&tid=1831815]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 362ms |

| 0 / 0 |
