Я пытался выяснить, что не так с набором запросов, которые у меня есть, и я просто запутался в этом моменте.
Он должен находиться в хранимой процедуре, которая вызывается приложением с графическим интерфейсом.
Есть только одна «крошечная» проблема, это сначала простая UPDATE
, затем INSERT
с использованием SELECT
с подвыбором и, наконец, еще одна UPDATE
. Выполняя эти запросы вручную, я получаю общее время выполнения 0,057 с, не слишком потертое.
Теперь я пытаюсь создать хранимую процедуру с этими запросами и пятью входными переменными, я запускаю эту процедуру, и с первой попытки это заняло 47.096 с, а последующие обращения к ней показали аналогичное время выполнения (от 35 до 50 с). Выполнение отдельных запросов из MySQL Workbench по-прежнему показывает время выполнения менее 0,1 с
На самом деле в этих запросах нет ничего необычного, так почему же хранимая процедура занимает вечность, а запросы сами по себе занимают лишь доли секунды? Есть ли какая-то особенность MySQL, которую я здесь упускаю?
Дополнительные результаты тестирования:
Кажется, что если я запускаю запросы в MySQL Workbench, но использую переменные, а не просто помещаю значения переменных в запросы, он выполняется так же медленно, как и хранимая процедура. Поэтому я попытался изменить хранимую процедуру, чтобы использовать статические значения вместо переменных, и внезапно она запустилась невероятно быстро. Очевидно, по какой-то причине использование переменной делает ее чрезвычайно медленной (например, первый запрос UPDATE
идет от примерно 0,98 с тремя переменными до 0,04-0,05, когда я использую значения переменных непосредственно в запросе, независимо от того, если он находится в хранимой процедуре или выполняет запрос напрямую).
Итак, проблема не в хранимой процедуре, а в том, что я использую переменные (что неизбежно).