我在相同的数据上对两个版本的MySQL执行以下过程,我发现性能有很大差异。 当我运行"显示完整的进程列表"。 我看到的唯一区别是MySQL版本5.5.15为每个SELECT生成NAME_CONST和COLLATE,如下所示。 两个DB上的字符集都是latin1。
DECLARE PROCEDURE示例() 开始 DECLARE A_Val int; DECLARE 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;
END;
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 使用NAME_CONST和COLLATE生成相同的SQL并且执行速度更快
从SomeTableX中选择B_Val,X_Val;
有人可以建议如何禁用NAME_CONST和COLLATE生成。 有没有办法告诉MySQL停止生成这些额外的NAME_CONST和COLLATE ???
答案 0 :(得分:1)
两台服务器上都是SHOW CREATE PROCEDURE
。您可能会看到它们是使用不同的CHARACTER SET
和/或COLLATION
构建的。