У меня есть сохраненная функция, которая должна сделать select ... from ... where foo IN (select ...)
Проблема в том, что это невероятно медленно по сравнению с простым where = ...
Поскольку известно, что этот синтаксис медленный, есть ли какой-нибудь возможный способ сохранить результаты в переменной и затем использовать эту переменную в условии IN ()
вместо этого? Я не знаю, как сохранить запрос с несколькими строками в переменной.
Это быстрое равенство с использованием переменной. (но неправильно b / c, он делает только 1 значение вместо нескольких)
BEGIN
DECLARE average DECIMAL(10,4);
DECLARE skuAsin VARCHAR(30);
SET skuAsin = (SELECT DISTINCT asin FROM inventory WHERE sku = aSku ORDER BY id DESC LIMIT 1);
SET average = (
SELECT avg(unitsByDay) FROM (
SELECT i.date, sum(units_ordered) as unitsByDay from inventory i
WHERE
i.asin = skuAsin &&
i.marketplace_id = mid &&
i.date between d1 and d2
GROUP BY date
) as vel
);
RETURN average;
END;
Это медленное использование IN (select)
BEGIN
DECLARE average DECIMAL(10,4);
SET average = (
SELECT avg(unitsByDay) FROM (
SELECT i.date, sum(units_ordered) as unitsByDay from inventory i
WHERE
i.asin IN (SELECT DISTINCT asin FROM inventory WHERE sku = aSku) &&
i.marketplace_id = mid &&
i.date between d1 and d2
GROUP BY date
) as vel
);
RETURN average;
END;