MySQL-запросы бывают быстрыми при прямом запуске, но очень медленными при выполнении как сохраненный процесс

Я пытался выяснить, что не так с набором полученных мной запросов, и сейчас я просто сбит с толку.

Предполагается, что это хранимая процедура, которая вызывается приложением с графическим интерфейсом пользователя.

Есть только одна «крошечная» проблема: сначала простое UPDATE , затем INSERT с использованием SELECT с подзапросом и, наконец, еще одно ОБНОВЛЕНИЕ . Выполняя эти запросы вместе вручную, я получаю общее время выполнения 0,057 с, не так уж и плохо.

Теперь я пытаюсь создать хранимую процедуру с этими запросами в ней и пятью входными переменными, я запускаю эту процедуру, и с первой попытки она заняла 47,096 с, а последующие вызовы к ней показали аналогичное время выполнения (от 35 до 50 с). Выполнение отдельных запросов из MySQL Workbench по-прежнему показывает время выполнения меньше 0.1s

В этих запросах действительно нет ничего особенного, так почему же хранимая процедура занимает вечность на выполнение, в то время как запросы сами по себе занимают лишь долю секунды? Есть ли какая-то особенность MySQL, которую мне здесь не хватает?

Дополнительные результаты тестирования:

Кажется, что если я запускаю запросы в MySQL Workbench, но использую переменные вместо того, чтобы просто помещать значения переменных в запросы он работает так же медленно, как и хранимая процедура. Поэтому я попытался изменить хранимую процедуру, чтобы использовать статические значения вместо переменных, и внезапно она заработала невероятно быстро. По-видимому, по какой-то причине использование переменной делает его чрезвычайно медленным (например, первый запрос UPDATE занимает примерно 0,98 с с тремя переменными до 0,04–0,05 с, когда я использую значения переменных непосредственно в query, независимо от того, находится ли он в хранимой процедуре или выполняет запрос напрямую).

Итак, проблема не в хранимой процедуре, а в том, что я использую переменные (что неизбежно).

10
задан mludd 24 October 2011 в 11:53
поделиться