|
|
|
| Господа, застрял.
Есть хранимая процедура, которая по заданным в ней формулам (очень большим) вычисляет из входящих параметров и полей таблицы значения X, Y и Z. Для примера что-то типа:
CREATE PROCEDURE `my_proc`(IN v_id INT, IN v_a INT, IN v_b INT, IN v_c INT)
BEGIN
SELECT (v_a - v_b)*(`var1` - `var2`) as `X`,
(v_a - v_c)*(`var3` - `var4`) as `Y`,
(v_b - v_c)*(`var5` - `var6`) as `Z`,
FROM `table1` WHERE `id` = v_id;
END;
|
Процедура вызывается из триггера в команде UPDATE и в неё передаются старые и новые значения.
Вызвав процедуру CALL `my_proc`(834, 1, 2, 3) получаем прекрасные результаты расчёта в виде таблицы:
X Y Z
-17 28 45
8 -1 0
41 2 40 и т.п.
|
Но задача состоит в том, чтоб дальше обрабатывать эту таблицу. Т.е. нужно дальше получить количество значений < 0, > 0, сумму и т.п.
SELECT * FROM CALL `my_proc`(834, 1, 2, 3) использовать нельзя.
Создание из запроса временной таблицы типа
CREATE TEMPORARY TABLE `temp1`
SELECT ...
очень сильно снижает производительность. Время выполнения запроса без временной таблицы = 0.0030 ~ 0.0050 с, а с её созданием - 0.15 ~ 0.17 с.
Таких запросов будет ОЧЕНЬ МНОГО (задача нахождения пересечения большого множества отрезков).
Подскажите каким путём можно "дёшево" обрабатывать полученную таблицу.
Может я неправильно использую процедуру или не так создаю временную таблицу? | |
|
|