Ошибка производительности процедуры MySQL из-за NAME_CONST

Я выполняю описанную ниже процедуру на двух версиях MySQL для одних и тех же данных, и я вижу значительные различия в производительности.
Когда я запускаю «Показать полный список процессов».
Единственное отличие, которое я вижу, заключается в том, что MySQL версии 5.5.15 генерирует NAME_CONST и COLLATE для каждого SELECT, как показано ниже.
Набор символов в обеих БД — латинский.

ОБЪЯВИТЬ ПРОЦЕДУРУ Sample ()
НАЧАТЬ
ОБЪЯВИТЬ A_Val int;
ОБЪЯВИТЬ B_Val varchar (50);

DECLARE ApplCursor CURSOR FOR
SELECT A, CONVERT(B, CHAR(50))
FROM SampleTable;OPEN ApplCursor;

Cursor_Loop: LOOP
FETCH ApplCursor INTO A_Val, B_Val;

SELECT B_Val, X_Val FROM SomeTableX;

END LOOP Cursor_Loop;

CLOSE ApplCursor;

КОНЕЦ;

Версия MySQL = 5.5.15
Для каждого выбора MySQL генерирует NAME_CONST и COLLATE, как показано ниже

выберите NAME_CONST (‘B_Val’, _ latin1’A12345 ‘COLLATE’ latin1_swedish_ci ‘), X_Val
от SomeTableX;

Версия MySQL = 5.7.16
Тот же SQL генерируется без NAME_CONST и COLLATE и выполняется намного быстрее

выберите B_Val, X_Val из SomeTableX;

Может кто-нибудь подсказать, как отключить генерацию NAME_CONST и COLLATE.
Есть ли способ сказать MySQL, чтобы прекратить генерировать эти дополнительные NAME_CONST и COLLATE ???

1

Решение

Так SHOW CREATE PROCEDURE на обоих серверах. Вы, вероятно, увидите, что они были построены с разными CHARACTER SET и / или COLLATION,

1

Другие решения

Других решений пока нет …