Я знаю, что этот вопрос обсуждался довольно часто здесь .Но у меня есть особый случай, когда мне нужно передать список параметров (через запятую), который не позволяет мне объявить и использовать локальную переменную для входного параметра.
Как указано в приведенном выше обсуждении, онпредлагается объявить локальную переменную и назначить параметры этой переменной.Однако что мне делать, если мой параметр имеет тип Text
и может быть разделен запятыми?
Например -
CREATE DEFINER=`Admin`@`%` PROCEDURE `MyReport`(
p_myparameter_HK Text
)
BEGIN
SELECT
*
FROM MyTable
WHERE
(find_in_set(MyTable.column_HK, p_myparameter_HK) <> 0 OR MyTable.column_HK IS NULL)
;
END
Производительность:
Запрос
Если я просто выполню запрос - 300 мс
Хранимая процедура
CALL MyReport('0000_abcd_fake_000')
Эта процедура продолжает работать бесконечно.
Мой вопрос: как я могу отключить parameter sniffling
и использовать локальную переменную вместо find_in_set
, чтобы соответствовать производительности запроса.