У меня есть запрос, который выполняется очень быстро, но сам по себе, когда я использую этот запрос в качестве тела функции, он сильно замедляется.Вот мой тестовый пример:
/******************* my function definition *********************/
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `GetNextScheduleForProgram`(
prog_id varchar(10)
) RETURNS varchar(10) CHARSET latin5
DETERMINISTIC
BEGIN
DECLARE scheduleid varchar(10);
SET scheduleid =
(
SELECT sc.ScheduleID
FROM Schedule sc
WHERE sc.ProgramID=prog_id
AND sc.StartDate BETWEEN now() and date_add(now(), interval 3 day)
ORDER BY sc.StartDate ASC
LIMIT 1
);
RETURN scheduleid;
END
А вот операторы запроса:
- сначала запрос выполняется как сам
- , затем функция используется стот же параметр:
SET @id1 = (SELECT sc.ScheduleID
FROM Schedule sc
WHERE sc.ProgramID='23860'
AND sc.StartDate BETWEEN now() and date_add(now(), interval 3 day)
ORDER BY sc.StartDate ASC
LIMIT 1);
SET @id2 = GetNextScheduleForProgram('23860');
В этом тесте @ id1 устанавливается примерно за 0,03 секунды , тогда как @ id2 приходит за 3,5 секунды (2 секунды приЛучший).Интересно, что вызывает это замечательное снижение производительности.
Мне нужно использовать эту функцию в другой хранимой процедуре, поэтому ожидание 2-3 секунды для каждой строки в хранимой процедуре убивает мою общую производительность.
Кто-нибудь может помочь мне улучшить с этого момента?