由于NAME_CONST,MySQL程序性能问题

时间:2017-02-10 11:44:04

标签: php mysql performance cursor

我在相同的数据上对两个版本的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 ???

1 个答案:

答案 0 :(得分:1)

两台服务器上都是SHOW CREATE PROCEDURE。您可能会看到它们是使用不同的CHARACTER SET和/或COLLATION构建的。